【C语言】基础知识杂记(整理自用)

简介: 【C语言】基础知识杂记(整理自用)

前言

之前一直在学新知识,最近打算复习一下之前学的,所以写了这篇文章,记录一下不熟练的知识点,自用,对大家帮助可能不是很大。

double类型与float类型

编译器默认7.0为double类型

在数据后加一个f,编译器就会认为7.0f为float类型

%的使用

取模

当%作为取模操作符来使用时,其左右两边必须是整数,不能是小数

打印%

当想打印出%时,使用%%,输出结果是%

#include<stdio.h>
int main()
{
  printf("%%");
  return 0;
}

输出结果:

!与~

逻辑反操作:真表示为假,假表示为真

#include<stdio.h>
int main()
{
  int a = 4;
  if (a == 4)
  {
    printf("1\n");
  }
  if (!(a == 4))
  {
    printf("1\n");
  }
  else
  {
    printf("0\n");
  }
  return 0;
}

运行结果:

~

将1取反为0、0取反为1

注意:

位操作符,操作的都是补码

提示:

-1的补码是32个1

sizeof和strlen

sizeof运算符

计算的元素在内存中占用的空间大小,单位是字节

最根本的区别是:sizeof是运算符,不是函数。并且sizeof可计算任意数据类型的大小

(当我尝试搜一下sizeof的源码看看它是怎么实现的时候,发现,它是运算符…)

‘\0’

注意,在计算数组的字节大小时,是包含’\0’的,因为\0也是里面的元素之一

strlen函数

计算数组中的元素个数,返回值类型是size_t,

strlen是函数,不是运算符。并且strlen函数只能计算数组的元素个数

‘\0’

strlen函数是计算‘\0’之前的元素个数,遇到‘\0’停止读取,并返回一个无符号整数,

此处涉及到strlen函数是如何实现的,此处附上它的源码

size_t __cdecl strlen (
        const char * str
        )
{
        const char *eos = str;
        while( *eos++ ) ;
        return( eos - str - 1 );
}

%g与%e

%g

在输出浮点型数据时,使用%g,编译器会选择是按照%f还是%e的方式来打印数据。哪种方式短就选择哪种,不输出无意义的0

%e

以指数的形式输出实数,

当对于输出无精度要求时,部分编译器自动认为小数部分有5位,指数部分有6位,

并且,小数点前只有1位(标准化指数形式)

示例:

下面用一段代码来区分%f、%e、%g

#include<stdio.h>
int main()
{
  float a = 123.321;
  printf("%f\n%e\n%g\n", a, a, a);
  return 0;
}

%G和%E

就是e在打印时是大写

static修饰的(局部、全局)变量和函数

static:静态的

用法一:static修饰局部变量

我们都知道:

局部变量在每次进入函数会重新创建,出了函数就会销毁(将空间还给操作系统)

并且局部变量存储在栈区,进入作用域自动创建,出作用域自动销毁

本质:

使变量的存储位置发生了变化

注意:

变量的作用域没变,无法出作用域使用 ,即无法在变量所处函数外面使用

static延长的是生命周期

修饰后:

局部变量出了作用域不会回收,局部变量的生命周期被延长,如果反复调用函数,会出现累积的效果,如:累加、累乘等

此时的局部变量已经存储在静态区,直到程序结束,该变量才会被回收

多说一句:

static所在代码在编译期间已分配地址,其代码行在运行时不再执行,即其地址不再变化(静态区)

用法二:static修饰全局变量

1:

全局变量无法在其他源文件中被引用

2:

使其只能在其所在的源文件内部使用

(即使其外部链接属性变为内部链接属性)

用法三:static修饰函数

注意:函数不存在生命周期这种说法

修饰前:

函数具有外部链接属性,即可以在其他源文件内被调用(使用extern声明)

修饰后:

外部链接属性变为内部链接属性

函数只能在其所在的源文件内部使用,其他源文件无法使用

好处:

这样就能设多个名字相同的函数,并且也不会发生冲突

(应该很少有人其名字一样的函数吧)

输出控制符

此处就整理了一些我不太会的,比较常见的我就没整理

%p

输出指针地址

十进制输出

%hd

以有符号整型的形式输出short类型整数

%u

以无符号整型的形式输出unsigned int类型的整数

八进制输出

%o

无前缀,以无符号的方式输出int类型的整数

%#o

以有前缀、无符号的形式输出int类型的整数

十六进制

%x

以小写、无前缀、无符号的形式输出int类型的整数

%#x

有前缀的形式输出整数

%X

以大写的形式输出整数

移位操作符

左移操作符和右移操作符

左移操作符

左边丢弃、右边补0

有*2的效果

提示:即使是负数,其运算之后不改变符号

右移操作符

分为两种右移方式:算术右移和逻辑右移

逻辑右移:

右边直接丢弃,左边补0

算术右移:

右边直接丢弃,左边补符号位

原来是负数,左边补1

原来是正数,左边补0

有/2的效果

大部分编译器采用的都是算数右移

结语

先复习到这里,之后会接着复习指针及后面的知识


相关文章
|
算法 Unix C语言
第一章:C语言的初次见面
学计算机的小伙伴们应该都知道C生万物,没错,学习编程刚开始接触的应该就是C语言,而我今天发表的博客就是谈谈C语言相关的问题。作为初次见面C语言,咱们就由一下几个方面来谈谈C语言。
50 0
|
Java 程序员 编译器
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
115 0
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
|
存储 自然语言处理 Linux
0基础C语言自学教程——收官之战——第十四节 文件的编译和链接
这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
158 0
0基础C语言自学教程——收官之战——第十四节 文件的编译和链接
|
Java C语言
进阶C语言之路,携君之手,步入程序大堂
进阶C语言之路,携君之手,步入程序大堂
77 0
|
IDE 编译器 测试技术
C语言万字基础笔记总结(一)下
简介:C语言学习笔记,记录所学,便于复习。 由于篇幅过大,考虑到观感,准备分多篇记录。 学习视频:《带你学C带你飞》 IDE:Clion 2021.1.3
C语言万字基础笔记总结(一)下
|
IDE 开发工具 C语言
C语言万字基础笔记总结(一)上
简介:C语言学习笔记,记录所学,便于复习。 由于篇幅过大,考虑到观感,准备分多篇记录。 学习视频:《带你学C带你飞》 IDE:Clion 2021.1.3
C语言万字基础笔记总结(一)上
|
存储 IDE 编译器
C语言万字基础笔记总结(二)
简介:C语言学习笔记,记录所学,便于复习。 由于篇幅过大,考虑到观感,准备分多篇记录。 学习视频:《带你学C带你飞》 IDE:Dev-C++ 5.11 为了练习编程习惯,暂时放弃Clion
C语言万字基础笔记总结(二)
|
程序员 编译器 C语言
C语言万字基础笔记总结(三)下
简介:C语言万字基础笔记总结(三)下
C语言万字基础笔记总结(三)下
|
算法 C语言
C语言错题锦集(持续更新)
C语言错题锦集(持续更新)
C语言错题锦集(持续更新)
|
存储 IDE 编译器
C语言万字基础笔记总结(三)上
简介:C语言学习笔记,记录所学,便于复习。 由于篇幅过大,考虑到观感,准备分多篇记录。 学习视频:《带你学C带你飞》 IDE:Dev-C++ 5.11