C语言深度剖析学习笔记(材料)_c语言深度剖析笔记
C语言深度剖析学习笔记(材料)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言深度剖析笔记”。
The C programming language Expert C programming C Traps and Pitfalls Write Clean Code Code Complete.Second Editon 林锐高质量程序设计指南-C++/C语言
最名不副实的关键字——static 修饰变量。变量分为局部变量和全局变量,但是都存在内存的静态区。静态全局变量:作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用它。准确的说:作用域是从定义之处开始,到文件结尾处结束,在定义处前面的那些代码行也不能使用它,想要使用就得在前面再加extern。#include staticint j;void fun1(void){ staticinti = 0;i++;} void fun2(void){ j = 0;j++;} int main(void){ int k = 0;for(k = 0;k
fun1();
fun2();}
//i的值是10,j的值是1;
return 0;} 答:静态局部变量定义一次,赋值一次,所以每次运行到fun1函数时,每次都会跳过static inti =0;语句,直接运行i++,所以i的值为10;而j的话,每次运行到fun2函数时,j都会被赋值为0,所以j最后的值为1。
修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
sizeofint表示什么?sizeof在计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。Sizeof操作符里面不要有其他运算,否则不会达到预期的目的。
Sizeof(int)*p表示什么意思?
int *p = NULL;sizeof(p)的值是多少?sizeof(*p)的值是多少?
答:sizeof(p)= 4;sizeof(*p)= 4;
int a[100];sizeof(a);sizeof(a[100]);sizeof(&a);sizeof(&a[0]);答:sizeof(a)=4;sizeof(a[100])= 4;sizeof(&a)= 400;sizeof(&a[0])= 4;int b[100];void fun(int b[100]){sizeof(b)};sizeof(b)的值是多少?
答:sizeof(b)= 4;
#include //a[0] =-1;-1在计算机中存储的是FF FFFFFF,截取后为FF;//a[0] =-1;1111 1111
255包括符号位 int main(void)//a[1] =-2;
1111 1110
254 {
//a[2] =-3;
1111 1101253 signed char a[1000];inti;
//a[254] =-255;0000 0001
for(i = 0;i
a[i] =-1-i;
//a[256] =-257;
1111 1111 0xff 开始新一轮的循环
}
printf(“%d”,strlen(a));//而strlen()遇到‘ ’就结束,但是并不包含字符串最后的’ ’
return 0;
//所以strlen(a)= 255;}
单纯的char类型应该只用于字符值的存储和使用;有符号和无符号的“char”型变量只能用于数值的存储和使用!!!
留3个问题:
1)按照上面的解释,那-0和+0在内存里面分别怎么存储?
答:补码存储!!!
2)inti =-20;unsigned j = 10;i+j = 多少?为什么?
答:这个要根据i+j的输出形式确定结果,如果输出是%d,则值为-10,如果输出是%u,根据强制类型转换,inti =-20,就强制转换为unsigned类型其值就是:4294967286 3)下面的代码有什么问题?
Unsigned i;for(i= 9;i>= 0;i--){printf(“%un”, i);} 答:unsigned存储的都是没有符号的类型,i--的值永远大于0,进入死循环模式!!
留一个问题:
在switch case语句中能否使用continue关键字?为什么?
答:break关键字是终止本层循环,当只有一层循环时,当代码执行到break时,循环终止。而continue表示终止本次(本轮)循环,当代码执行到continue时,本轮循环终止,进入下一轮循环。Break改成continue时会一直循环!