数组
数组的元素类型决定数组如何定义
如:
元素char 数组定义char a[6];
元素char * 数组定义char *a[6];
元素char * 数组定义char *a[6];数组元素决定数组指针的类型
如:
元素char 数组定义char a[6] 数组指针char (*p)[6] p = a;
元素char * 数组定义char *a[6] 数组指针char *(*p)[6] p = a;所以:不要去在意关于元素类型的指针,只要写好数组就可以了,最后加上元素类型就好了。
数组名 = &数组名
#include <stdio.h>
int main()
{
int buf[3] = {1, 2, 3};
printf("0x%x\n", &buf); //输出0x19ff34
printf("0x%x\n", buf); //输出0x19ff34
return 0;
}
对二维数组的判断,先从高层到低 层,一层一层判断。
如: 要记住一条规则,数组名 = 数组首元素的地址
a[2][5];
a = &a[0]; //第一层有两个元素
a[0] = &a[0][0]; //第二层有五个元素
要判断一个指针是一级指针还是二级指针,只要让指针加一,然后得出它的地址,就知道了。
如:
int (*p)[100] p + 1 = p的值加上 4 X 100
int a[100] = {0}; a + 1 = a的值加上4
函数指针
函数指针:首先修饰词是函数,主语是指针,
类型如:int (* fun)(int);
指针函数:就是返回值为指针的函数,
类型如:int * fun (int);
函数指针数组:就是元素是函数指针的数组
类型如:int (* fun[6])(int);
返回值为指针 的 函数指针数组:就是元素是函数指针的数组
类型如:int *(* fun[6])(int);注意:数组元素类型不能为函数
如 int fun[6](int);
malloc
malloc(0):不同的编译器可能不同,有可能为NULL;
malloc(4):GCC分配的最低字节是16B,所以回分配16B.
字符串常量放到代码段。
字节对齐
更改C编译器的缺省字节对齐方式
在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地&#