我在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常量=4的值。
现在,这是合理的,因为sizeof(char*)在我的机器上是常量,sizeof(char)也是常量。
但是只要我声明结构person,sizeof(person*)和sizeof(person)也应该是常量,并且它也应该产生一个常量值,不是吗?
发布于 2012-03-08 22:15:06
你的编译器错了。
char b[8];
i = sizeof(b)/sizeof(b[0]);应该会产生i==8。
您得到的struct大小结果是正确的。如果我是你,我会换个编译器。
如果您将b传递给一个计算大小的函数,那么您就对了。但就像现在的代码一样,不是。
另外,如果它是一个计算sizeof(people) / sizeof(people[0])的函数,它接收了people作为参数,那么你也会得到一个常量。
这是因为数组在作为参数传递时会衰减为指针。
发布于 2012-03-08 22:17:16
您确定要将sizeof应用于数组,而不是指针吗?
在这种情况下,函数参数实际上是一个指针,因此您将得到i == sizeof(char*)
void f(char b[8]) {
i = sizeof(b)/sizeof(b[0]);
}您发布的代码应该明确地给出数组元素的数量。如果没有,那么您的代码中要么有其他非常奇怪的东西,要么您的编译器已经无可救药地崩溃了。
发布于 2012-03-08 22:18:07
char b[8];
i = sizeof(b)/sizeof(b[0]); 这应该只给出值8。sizeof(b)将给出数组的大小,而不是您所认为的sizeof(char *)。
https://stackoverflow.com/questions/9618933
复制相似问题