在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;
数组在函数传递的过程中通常会退化为指针,但语法上讲它俩还是有区别的。在这个例子中,编译器显然知道它是一个数组。 如果显示将它转换为指针类型char *p = &z[0],则sizeof(p)就会是8
你已经定义了x作为指向字符的指针,所以sizeof(x)生成指向字符的指针的大小。在当前实现中,通常为32位或64位。一个char通常是8位,所以您可以预期sizeof(char *)在大多数当前编译器上生成4或8。
你已经定义了z作为一个由5个字符组成的数组,所以sizeof(z)产生5个字符数组的大小。因为数组的元素是连续的,并且sizeof(char)保证为1,其明显值为5。
如果(例如)将一个由5个字符组成的数组放入一个结构中,然后是(例如)一个int,编译器很有可能在这两个元素之间插入一些填充。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。