C++ sizeof分析

char str[] = "Hello";
char* pstr = str;
const char* str_list[] = { "Hello","world"};
void* pbuf = malloc(100);
int n = 10;

sizeof(str)
sizeof(pstr)
sizeof(str_list)
sizeof(pbuf)
sizeof(n)

64 位机上,分析一下输出结果。

  1. 字符数组的大小包括 ‘\0’,“Hello” 有 5 个字符,加上 ‘\0’,sizeof(str) 大小为6。

  2. 64 位机,因为寻址的原因,需要8个字节来存储指针的大小,因此 sizeof(pstr) 的大小为8。

  3. 最困惑的要属 sizeof(str_list) 了。一开始认为,字符数组指针也是指针,所以输出应该是 8,但程序输出的结果却是 16。经查证,[] 的优先级比 * 要高,因此 str_list 先和 [] 结合,它还是一个数组,数组中的元素是 char *。这个数组有两个元素,一个是指向常量 “Hello” 的指针,一个是指向常量 “world” 的指针,每个指针的大小都是 8,因此输出是 16。

  4. void* 本质也是一个指针,因此 sizeof(pbuf) 的大小也为8。

  5. int 类型在 64 位机上占 4 字节的存储空间,因此 sizeof(n) 的大小为4。

这里我一直有一个错误的认识。比如,int n[] = {1, 2, 3, 4}; 而我们知道,对于像这样的数组来说,&n[0]&n 表示的都是这个数组的第一个元素的地址,我之前一直想当然的认为 sizeof(n) 表示的也是这个数组第一个元素的大小。这显然是错误的!!

以后遇到关于 sizeof 的问题将统一放到这篇博客上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值