首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于不同的数据类型,sizeof(Datatype_pointer)/sizeof(数据类型)的值不同,为什么?

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

Stack Overflow用户
提问于 2012-03-08 22:11:17
回答 3查看 148关注 0票数 0

我在C++程序中声明了以下结构:

代码语言:javascript
复制
    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,即数组中的元素个数;即使您添加或减少元素...

代码语言:javascript
复制
         char b[8];
         i = sizeof(b)/sizeof(b[0]);

在我的机器上给出i=a常量=4的值。

现在,这是合理的,因为sizeof(char*)在我的机器上是常量,sizeof(char)也是常量。

但是只要我声明结构person,sizeof(person*)和sizeof(person)也应该是常量,并且它也应该产生一个常量值,不是吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-08 22:15:06

你的编译器错了。

代码语言:javascript
复制
char b[8];
i = sizeof(b)/sizeof(b[0]);

应该会产生i==8

您得到的struct大小结果是正确的。如果我是你,我会换个编译器。

如果您将b传递给一个计算大小的函数,那么您就对了。但就像现在的代码一样,不是。

另外,如果它是一个计算sizeof(people) / sizeof(people[0])的函数,它接收了people作为参数,那么你也会得到一个常量。

这是因为数组在作为参数传递时会衰减为指针。

票数 5
EN

Stack Overflow用户

发布于 2012-03-08 22:17:16

您确定要将sizeof应用于数组,而不是指针吗?

在这种情况下,函数参数实际上是一个指针,因此您将得到i == sizeof(char*)

代码语言:javascript
复制
void f(char b[8]) {
    i = sizeof(b)/sizeof(b[0]);
}

您发布的代码应该明确地给出数组元素的数量。如果没有,那么您的代码中要么有其他非常奇怪的东西,要么您的编译器已经无可救药地崩溃了。

票数 4
EN

Stack Overflow用户

发布于 2012-03-08 22:18:07

代码语言:javascript
复制
  char b[8];          
  i = sizeof(b)/sizeof(b[0]); 

这应该只给出值8。sizeof(b)将给出数组的大小,而不是您所认为的sizeof(char *)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9618933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档