c++ - 不同数据类型的sizeof(datatype pointer)/sizeof(data type)取值不同,为什么?

标签 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 */

这里给出 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/

相关文章:

c++防止通过getter更改引用

c - Stack ADT实现中难以理解的表达

javascript - 使用 .pop() 值生成新数组

c++ - 在模板类中重载 operator=

c++ - 如何正确选择 zmq 最大缓冲区大小?

来自多个函数的全局字符串的 C strtok

c - C 中的方阵求逆

javascript - 如何在 JavaScript 中创建一个包含其他类集合的类

arrays - VBA。用于搜索或替换的数组

c++ - 在类构造函数中初始化结构