首先声明,我是一个C语言的初学者,虽然在大一学过,但基本没学到什么,最近看看C语言的一些书,K&R的书很不错,不过的确需要一些基础,偶然在图书馆看到了《C陷阱和缺陷》的书,觉得很有意思,有些自己一直没有注意到,或者一直似懂非懂,写下一些笔记吧:
字符与字符串以及‘和“的区别
用单引号引起的一个字符其实是一个整数,一般对于我们的编译器是ASCII值,而双引号引起来的字符串代表一个指向无名数组的指针,该数组被双引号之间的字符以及一个额外的二进制为零的字符‘\0’初始化
在C语言中,字符串常量代表了一块包括字符串中所有字符以及一个空字符('\0')的内存区域的地址
printf("Hello,World\n");
与下列语句等效:
char hello[]={'H','e','l','l','o',',','W','o','r','l','d'.'\n',0};
printf(hello);
虽然第二种方法gcc会产生警告:警告: 格式字符串不是一个字面字符串而且没有待格式化的实参
但记过的确是一样的
由运算符的优先级引发的错误:
while(c=getc(in) != EOF)
putc(c,out);
这个错误以前我也犯过,结果调试了很长时间才调试出来,不要怕写的程序会有错,要学会去调试,相信写的程序一定会有结果,调试运行成功的程序收获更多
运算符的优先级:
算术>移位>关系>逻辑
其实这个地方还是不是特别清楚
else悬挂引发的问题!!!
指针与数组
C语言中的数组值得注意的地方有两点:
1.C语言中只有一维数组,而且数组的大小必须在编译期就作为常数确定下来,然而,数组的元素可以是任何类型的对象
2.对于一个数组,我们只能做两件事:确定该数组的大小,以及获得该数组下标为0的元素的指针