C语言笔记(数据类型)
1. 例如,在32位的数中,1+31个零,也就是意义上的”-0”。这是负数中的最大值。
2. 字符是有符号数
3. Sizeof 是关键字,不是函数。其作用是求出变量所占的字节数
实例:
终端显示图:
分析:由此可见,在虚拟机中int 占4个字节,char 占一个字节,float占 4 个字节,double 占8个字节。其中,经过实验,发现无论说明类型的指针变量,都是占4个字节。
4.strlen为库函数。其作用是求变量的字长,当遇到’\0’的时候,读取结束。
5.经典面试题:(陷阱之有符号和无符号)
求下面的程序最终会输出多少?
终端显示图:
分析:根据最后a[i]的各个输出,我们发现从最开始的-1到-128,然后在-128-1就是到了127(自己要学会计算-128-1的值),从127再到0。前面一个知识点,我们提到过当strlen遇到’\0’后,就会结束。而0的ASCII码是NULL,也就是’\0’.所以,strlen就是读取的-128-127的数据,也就是255个数据长度。
知识点:
1.char数据范围是-128-127 2.当strlen遇到’\0’后,就会结束。
6.经典面试题:(陷阱之有符号和无符号)
求解有符号i +无符号j最终的输出结果为多少?
终端显示图:
分析:这是一道比较经典的关于有符号无符号陷阱的面试题。大部分人在看到这道题目的第一眼,会得出-10的答案。其实不然,得出这样的答案是因为我们没有看出这里的陷阱。i是无符号数,而j是有符号数。
在计算机不同类型的数字进行运算的时候,往往会将数转换成范围较大的那个数字的类型。例如,当一个int 类型和一个 char 类型进行运算时,会将其转换成int 类型。
那么,当有符号数据和无符号数据进行运算的时候,则会将数据转换成无符号类型的。而-20的无符号数据表示为42949676(学会将有符号数据转换成无符号数据),其加上10后便得到了终端上最终输出的值。
7. volatile 防止被优化
8. Const 修饰的变量,可以被访问,但不可以被修改。(如果一定要修改,我们可以通过访问地址的方式进行修改)
实例:
终端显示图:
分析:由上图终端显示结果,我们可以看出const所修饰的变量的值不可以轻易被改变。除非使用指针访问地址的方式外。