我在我的 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/