1.day10
1、perror()
原型:void perror(const char *s); 根据errno呈现错误信息
perror("malloc error");
malloc error: Cannot allocate memory
2、多文件编译
.c ---预处理(.i -E)---汇编(.s -S)---二进制(.o )---链接(可执行文件)
3、结构体对齐
1)32位操作系统,最大4个字节对齐。64位操作系统,最大8个字节对齐;
2)#pragma pack(n),强制对齐,比如4、8;
4、位域
1)赋值时不能超过该类型的承受范围;
unsigned char a:2; // 那么a只能存 0 1 2 3 这几个数字
a = 5 ; //错误
2)位域宽度为0的位域称为空域,其作用是:该次对齐空间剩余部分全部补0;
struct xx{
int b:1 ;
int :0 ; // 32位对齐,b用了1位,所以该处共有31个0
int c:3 ; // 新的对齐行
}
5、申请结构体变量的空间
typedef struct{
int x;
int y;
int z;
char c;
short d;
} uu_t;
uu_t *p = (uu_t *)malloc(sizeof(uu_t));
6、条件编译
#if defined(宏) || defined(宏)
代码
#endif
#define N(a,b) a+10+b
N(1,2)*10; // 1+10+2*10,错误
最标准的写法:
#define N(a,b) ((a)+10+(b))
2.day9
1、数组一旦被定义好,就不能改变大小,数组名字也不能赋值;
int arr[10]; arr = 就是错的
2、指针数组、数组指针;
char *a[2] //指针数组,表示有a[2]个指针;
char (*a)[2] //数组指针,表示第一维是指针;
3、scanf("%s")遇到空白符停止的特点;
4、字符串操作函数;
1)strcmp(s1, s2),返回s1 - s2的值(或者固定-1、0、1的值);
5、如何快速查看函数;
1)n + shift + k,3 + shift + k,去C库函数查找;
6、内存管理;
1)如下图所示,是虚拟内存的空间分布;
2)栈,先进后出,地址由高到低分配;