【发布时间】:2012-03-08 14:11:17
【问题描述】:
我在我的 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变体总是给你 4... (ideone.com/eeniL) -
它在我的机器上给出了 4,我执行了代码。 sizeof(char*) 取决于在我的机器上容纳地址所需的字节数,并且 sizeof(char) 始终为 1,不是吗。所以,它需要 4*sizeof(char) 来容纳我机器上的地址...
-
这篇文章很好地说明了为什么人们应该发布完整的程序而不是代码片段。请发布最短的完整程序来演示您的问题。 sscce.org
-
但是在上面的代码中,你没有
char*,你有一个char[8]。 -
@Oli Charlesworth:我的编译器做了一些奇怪的事情,我用 Microsoft Visual C++ 尝试了代码,它可以工作..
标签: c++ c arrays pointers sizeof