开发者社区> 问答> 正文

C++数组和指针的大小结果

在x86_64体系结构上,指针是8个字节。对我来说有道理sizeof(x)我知道char是单个字节,而5个字节是数组的大小。但sizeof(z)为什么不是8?

int* x = new int[10];
char z[5];

// Returns 8
std::cout << "This is the size of x: " << sizeof(x) << std::endl;

// Returns 5
std::cout << "This is the size of z: " << sizeof(z) << std::endl;

展开
收起
aqal5zs3gkqgc 2019-12-03 22:14:26 4681 0
3 条回答
写回答
取消 提交回答
  • 数组在函数传递的过程中通常会退化为指针,但语法上讲它俩还是有区别的。在这个例子中,编译器显然知道它是一个数组。 如果显示将它转换为指针类型char *p = &z[0],则sizeof(p)就会是8

    2020-03-23 17:35:16
    赞同 展开评论 打赏
  • 因为 z 是定义的定长数组,编译器能自动推导出数组长度,因此 sizeof(z) = sizeof(char) * 5

    2020-03-16 15:25:45
    赞同 展开评论 打赏
  • 你已经定义了x作为指向字符的指针,所以sizeof(x)生成指向字符的指针的大小。在当前实现中,通常为32位或64位。一个char通常是8位,所以您可以预期sizeof(char *)在大多数当前编译器上生成4或8。

    你已经定义了z作为一个由5个字符组成的数组,所以sizeof(z)产生5个字符数组的大小。因为数组的元素是连续的,并且sizeof(char)保证为1,其明显值为5。

    如果(例如)将一个由5个字符组成的数组放入一个结构中,然后是(例如)一个int,编译器很有可能在这两个元素之间插入一些填充。

    2019-12-03 22:15:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载