sizeof(char [])和sizeof(char *)等于多少?

  • Post author:
  • Post category:其他


下面的代码执行结果是多少?

  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,



版权声明:本文为Namcodream521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。