下面的代码执行结果是多少?
1 #include <stdio.h>
2
3 int main(void)
4 {
5 char ca[] = {"123456"};
6 char *pca = "123456";
7
8 printf("sizeof(ca)=%d,sizeof(pca)=%d,sizeof(*pca)=%d\n",sizeof(ca),sizeof(pca),sizeof(*pca));
9
10 char cb[3][6] = {"123456","123456","123456"};
11 char *pcb[] = {"123456","123456","123456"};
12
13 printf("sizeof(cb)=%d,sizeof(pcb)=%d,sizeof(*pcb)=%d,sizeof(**pcb)=%d\n",sizeof(cb),sizeof(pcb),sizeof(*pcb),sizeof(**pcb));
14
15 return 0;
16 }
答案是:
//32位
$ gcc sz.c -o sz -m32
[nereus@nereusp cpp]$ ./sz
sizeof(ca)=7,sizeof(pca)=4,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=12,sizeof(*pcb)=4,sizeof(**pcb)=1
//64位
$ gcc sz.c -o sz
$ ./sz
sizeof(ca)=7,sizeof(pca)=8,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=24,sizeof(*pcb)=8,sizeof(**pcb)=1
sizeof(数组名)返回的是数组的大小
sizeof(ca)=7,注意此处包含一个结束符
sizeof(cb)=18,
sizeof(一维数组指针)返回的是数组单个
元素指针
的大小,即系统指针的长度,32位系统为4,64位系统位8
64位:sizeof(pca)=8,32位:sizeof(pca)=4
sizeof(*一维数组指针)返回的是数组单个元素对应类型的大小
sizeof(*pca)=1,char的大小
sizeof(二维数组指针)返回的是二维数组
行指针
的大小,32位系统为
行数×4
,64位系统位
行数×8
sizeof(pcb)等同于sizeof(pcb[0])、sizeof(pcb[1])、sizeof(pcb[2])
64位:sizeof(pcb)=24,3行×8,
注意二维数组每一行的结尾没有结束符’\0’,所以是行长度为8
32位:sizeof(pcb)=12,3行×4,
sizeof(*二维数组指针)返回的是系统指针的长度,32位系统为4,64位系统位8
64位:sizeof(pcb)=8,32位:sizeof(pcb)=4
sizeof(**二维数组指针)返回的是数组单个
元素指针
的大小,即char的大小
sizeof(**pcb)=1,