gpt4 book ai didi

c++ - 不同数据类型的sizeof(datatype pointer)/sizeof(data type)取值不同,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:51 25 4
gpt4 key购买 nike

我在我的 C++ 程序中声明了以下结构:

    struct person {
char name[10]; /* first name */
char id[10]; /* ID number */
off_t pos; /* position in file, for demonstration */
} people[] = {
{ "arnold", "123456789", 0 },
{ "miriam", "987654321", 10240 },
{ "joe", "192837465", 81920 },
};

j = sizeof(people) / sizeof(people[0]); /* count of elements */

这里给出 j = 3,即数组中没有元素;始终即使您添加或减少元素...

但是

         char b[8];
i = sizeof(b)/sizeof(b[0]);

在我的机器上给出 i = a constant = 4 的值。

现在这是合理的,因为 sizeof(char*) 在我的机器上是常量,sizeof(char) 也是常量..

但是一旦我声明了 struct person,sizeof(person*) 和 sizeof(person) 也应该是常量,并且它也应该产生一个常量值,不是吗???

最佳答案

你的编译器是错误的。

char b[8];
i = sizeof(b)/sizeof(b[0]);

应该产生 i==8

您获得的 struct 大小的结果是正确的。如果我是你,我会切换编译器。

如果您将 b 传递给计算大小的函数,那么您是对的。但是按照现在的代码,不。

此外,如果它是一个计算 sizeof(people)/sizeof(people[0]) 的函数,它接收 people 作为参数,你也会得到一个持续的。

这是因为数组在作为参数传递时会衰减为指针。

关于c++ - 不同数据类型的sizeof(datatype pointer)/sizeof(data type)取值不同,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com