今天看了一本C陷阱与指针的书,从中挑选了一些我自己平常不太注意的地方,或者有些是记不太清的东西,稍微整理了下有以下这些地方:
1:=与==是不同的,一个是赋值,一个是比较
2:&与&&是不同的,前者是按位与,后者是逻辑与,理解2&1和2&&1的结果
3:整形常量第一个字符是0,则代表8进制,0195这个理解成141(十进制),0215(八进制)。
4:‘’中的字符代表一个整数,“”代表指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制为0的字符‘\0’初始化。
5:a+++++b的含义(a++)+(++b)若根据贪心法,((a++)++)+b,但语法上a++不能做左值。
6:float g():()优先级大于,则g()函数返回一个浮点型指针;
7:(*fp)():*fp是该指针指向的函数,(*fp)()是调用该函数的方法;void(*fp)():代表fp是一个返回值为void类型的函数的指针;
8:((void()())0)():里面(void(*)())0将常数0转换成指向返回值为void的函数的指针类型,整式就是调用首地址为0位置的子函数。
9:算术运算符>移位运算符>关系运算符>逻辑运算符。赋值运算符<条件运算符。
10:声明的后面要有分号,包括结构体,类定义;
11:当数组作为参数时,实际上是数组的第一个元素作为了参数。
12:编译器保证由0转换而来的指针不等于任何有效的指针,决不能使用该指针所指向的内存中存储的内容。
13:有符号整型相加可能会溢出,稳妥的是转换成无符号数。
14:static修饰符把变量的作用域限制在一个源文件中,对其他源文件不可见。
15:fread()和fwrite()之间要有fseek才可以进行交叉读写。
16:FILE和LINE是内建于C语言处理器中的宏,它们会被扩展为所在文件的文件名和所在代码行的行号。
17:assert的参数是一个表达式,若表达式为0,就使程序终止执行,并给出一条适当的出错
C语言需要注意的地方
最新推荐文章于 2021-05-22 13:08:57 发布