对于学计算机的孩子来说,c语言是最简单的,基础学科,但是往往在学习的过程中,你忘了很多细微的知识点,下面的知识点是我复习的过程中总结出来的,你真的全会吗?
1.sizeof的理解;
int i = 0; printf("%d\n",sizeof(++i)); printf("%d\n",i);
大家觉得这个代码的输出是什么呢?也许你很自信的觉得是4,1.但是你好好想一想,这里有坑。
注:sizeof不对后面的操作数进行运算,编译器编译时,只是识别了操作数的类型。
2.逗号;
逗号,看起来就是一个不起眼的运算符,可是很多人都会栽在这个逗号运算符上面。
int x=10,y=20,z=30;
int k=(x=1,y=2,z=3);
那么k的值是多少呢,k=3;
注:逗号运算符是连接多个表达式成为一个表达式,作用是从左往右一次执行,整体的结果取决于最后一个表达式。
3.printf有返回值吗?
也许你天天使用printf,但是有返回值吗,也许你也不能确定,有的人会认为他就是void返回值,因为返回值没有用呀,那么在这里给你看看这个奇迹。
printf("%d",printf("%d",printf("%d",43)));这个的输出值是什么,你见过函数的嵌套调用,但是你没有注意过printf居然可以嵌套调用。结果是4321;
注:printf是有返回值的,并且他的返回值int。返回的是字符数。
解释:从里往外说,那么第一printf打印43,这个在正常不过了,但是第二个printf打印的就是第一个printf的返回值,那么第一个返回值是多少,就得看看43是几个字符,两个所以第二个printf打印的就是2,第三个printf就打印第一个printf的返回值,第二个只有一个2,那么就是一个字符,打印1。
4.switch和if..else if..else 的区别?
当然在一目了然的角度肯定是switch是一目了然的,但是谁的效率高呢,这得看看底层的数据,在三个分支以内的效率都是if..else if..else ..效率更高一点,但是分支越多就是switch的效率高了,但是为什么,这就得看看switch的底层数据结果了,简单的来说就是switch底层就是一个调转的数组表,那么你找到一个就是数组的查找,效率肯定高。但是有要求,就是case后面必须是整型或者常量,这就是底层的数据的影响,数组的下标,下标当然就是整型了。