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

24 篇文章 0 订阅

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

  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,

  • 13
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值