int main()
{
char a[5]={'A','B','C','D'};
char (*p3)[5] = &a;
char (*p4)[5] = a;
return 0;
}
p3这个定义的“=”号两边的数据类型完全一致,
而p4这个定义的“= ”号两边的数据类型就不一致了。
左边的类型是指向整个数组的指针,右边的数据类型是指向单个字符的指针。
p3+1的值会是什么?p4+1的值又会是什么?
C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析
成一个指向其首元素首地址的指针。这条规则并不是递归的,也就是说只有一维数组才是
如此,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针之后,后面的维
再也不可改写。比如:a[3][4][5] 作为参数时可以被改写为(*p)[4][5] 。
用malloc 函数申请0 字节内存会返回NULL 指针吗?
可以测试一下,也可以去查找关于malloc 函数的说明文档。申请0 字节内存,函数并
不返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为 0 的内存。这
好尺子上的某个刻度,刻度本身并没有长度,只有某两个刻度一起才能量出长度。对于这
一点一定要小心,因为这时候if (NULL !=p)语句校验将不起作用。