对于不同的数据类型,sizeof(datatype_pointer)/ sizeof(datatype)的值不同,为什么?

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)也应该是常量,并且它也应该产生一个常量值,不是吗?

Luc*_*ore 5

你的编译器错了.

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的参数,你也会得到一个常数.

这是因为当作为参数传递时,数组会衰减为指针.