第一章
1.2 按位运算符:& 逻辑运算符:&&
1.3 单字符符号:只有一个字符长 多字符符号:含多个字符
贪心法,大嘴法:一个字符一个字符读入,如果该字符可能组成一个符号,那么再读下一个字符,判断已经读入的两个字符组成的字符串能否组成一个(多字符)符号的一部分,如果可以,继续读下一个字符,重复上述判断,直到读入的字符已不再可能组成一个有意义的符号。
eg: y = x/*p /*编译器将这里视为y=x,后面的为注释*/
应当更改为 y = x /(*p);
1.5 字符与字符串:
字符:用单引号引起的一个字符实际代表一个整数,该整数值对应于该字符在编译器采用的字符集中的序列值。
字符串:双引号引起,代表一个指向无名数组起始字符的指针。该数组被双引号之间的字符以及一个额外的二进制为0的字符‘\0‘初始化。
第二章
2.1 理解函数声明
根本原则:声明一个给定类型的变量,将声明中的变量名和末尾的分号去掉,将剩余部分括号括起来,可得到该类型的类型转换符。
float (*h)(); //h是一个指向返回值为浮点类型的指针 float (*)() //表示一个“指向返回值为浮点类型的函数的指针”的类型转换符
假设fp为一个函数指针,则可以 (*fp)()调用该指针指向的函数。
则调用首地址为0位置的子例程,可以写作:(*0)();
但必须将0做类型转换,因为*必须作用一个一个指针(这里该指针必须为函数指针)
void (*fp)(); //声明一个指向返回值为void类型的函数的指针 void (*)() //根据之前的原则,这样得到一个“指向返回值为void类型的函数的指针”的类型
因此对0类型转换的结果为:
(void (*)())0
因此调用首地址为0的子例程为:
(*(void(*)())0)();
思考:
void (*signal(int,void(*)(int)))(int); //声明了一个signal函数 简化表达: typedef void (*HANDLER)(int); //定义HANDLER为一种函数指针类型 HANDLER signal(int, HANDLER); //signal为一个形参:整型,函数指针 返回值:函数指针 //该函数指针指向一个参数为int,返回值为void的函数
附:关于typedef的思考
typedef int *apple; 理解它的正确步骤是这样的:先别看typedef,就剩下int *apple; 这个语句声明了一个指向整型变量的指针apple (注意:定义只是一种特殊的声明),加上typedef之后就解释成声明了一种指向整型变量指针的类型apple 。
原文:https://www.cnblogs.com/dzy521/p/9383820.html