1. static: 修饰局部变量(只在初次运行时,进行初始化工作) 全局变量(只是本.c文件可见) 函数(类似于全局变量)
2. extern:编译器并不匹配extern的函数的参数列表,只做函数名匹配!
3. typedef:重定义过的数据类型,对于typedef char* newC; newC a,b;,这时候会将a b都定义为char *,而使用char *a,b或者define获得效果都是只能把a定义为char *,而b还是char而已
4. typedef char * ptrC; const ptrC p2 = string; 这里并不是和define效果一样,简单的替换,而是变为const 修饰了p2这个指针变量是常量。
5. #define的好处:可以使用ifndef undef ifdef等;唉进行逻辑判断。
6. typedef的好处:定义的变量类型范围被限制在所定义的函数或者文件内。
7. int *( *(*fp) (int))[10]; 解释:fp是一个函数指针,指向一个形参为一个int型数据的,返回值是一个指向有10个指针的指针数组的指针,该指指针数组里的每一个元素指向一个整型。
8. int *(*(*arr[5])( ))( ); 解释:arr是函数指针数组,数组中每个元素指向一个形参为空,返回值是一个指向函数指针的指针,该函数形参为空,返回值为int型。
9. float (*(*b( )) [ ])( ); 解释:b是一个函数指针,该函数参数为空,返回值指向一个函数指针数组,数组中的每一个元素都指向一个函数参数为空,返回float型的函数。
10. float( *(*e[10])(int *))[5]; 解释:e是函数指针数组,每个元素指针指向一个函数参数为int *,返回值指向一个数组指针,数组大小为5,类型为float的函数。
11. sizeof a/(a) 而 sizeof(int)必须加括号
12. 为什么一个字节的范围为 -2^7 – 2^7-1 ? 补码表示,-128取反加一,得到数字就是最小,而整数取反加一是本身,而且最高位为符号位,所以最大为2^7-1
13. unsigned int + int ->unsigned int
14. struct student str = {.account= 1, .name = “xx”, .age = 3};可以这样初始化
15. 结构体大小:以最长的成员长度进行分配(无论这个最长的成员位于什么位置,整个结构体为每个变量分配的长度就是最长的字节数)
struct stu
{
intnum;
chara;
longlongname;
}; 大小为16 = (4 + 1) + 8 = 8 + 8
16. 结构体成员后为; 枚举成员后为, 联合union 成员后为;
17. 枚举和#define的区别:1)#define 在预编译阶段进行简单的替换,枚举常量则是在编译的时候确定其值; 2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量; 3)枚举一次可以定义大量相关的常量,而define只能一次定义一个。
18. 枚举的大小:一般为4个字节,为一个整型int的大小,和其中的常量个数无关,因为是常量,所以不具有内存空间大小。
19. 联合体的大小:取联合中最长的成员长度,注意对齐方式VS2013采用以最短成员为对齐长度!!!!