bhu*_*hni 0 c c++ arrays pointers sizeof
我在我的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 */
Run Code Online (Sandbox Code Playgroud)
这里给出j = 3,即数组中没有元素; 总是即使你添加或减少元素......
但
char b[8];
i = sizeof(b)/sizeof(b[0]);
Run Code Online (Sandbox Code Playgroud)
在我的机器上给出i = a constant = 4的值.
现在这是合理的,因为sizeof(char*)在我的机器上是常量,而sizeof(char)也是常量.
但是一旦我声明了struct person,sizeof(person*)和sizeof(person)也应该是常量,并且它也应该产生一个常量值,不是吗?
你的编译器错了.
char b[8];
i = sizeof(b)/sizeof(b[0]);
Run Code Online (Sandbox Code Playgroud)
应该屈服i==8.
您获得的struct大小结果是正确的.如果我是你,我会切换编译器.
如果你要传递b给计算大小的函数,那么你就是对的.但是现在的代码是,没有.
另外,如果它是一个函数计算sizeof(people) / sizeof(people[0])接收people的参数,你也会得到一个常数.
这是因为当作为参数传递时,数组会衰减为指针.