指针数组
定义如下数组:
char *a[ ] = {"China","French","America","German"};
那么a的长度是多少呢?
sizeof(a) = 16;
因为a表示的是地址,是上面定义的数组的地址,可以看到 *a[ ]用逗号分隔了4组,假设当前计算机地址为32位(即4个字节),相应滴,a的长度就是16字节了。
上面说到a表示的是地址,因此a[1]、a[2]并非表示字符串本身,而是值存储字符串的地址,如下:
#include <stdio.h>
int main()
{
char *a [ ] = {"China","French","America","German"};
printf("%p %p %p %p\n",a[0],a[1],a[2],a[3]);
return 0;
}
输出>>:
00422FB8 00422FB0 00422FD0 00422020
Press any key to continue
可以看到,当前的数组存储的是地址,另外,这些地址本身并不连续,由编译器自动分配,不要想当然。