当前位置:  开发笔记 > 编程语言 > 正文

C中结构数组'sizeof'的结果?

如何解决《C中结构数组'sizeof'的结果?》经验,为你挑选了3个好方法。

在C中,我有一个结构数组定义如下:

struct D
{
    char *a;
    char *b;
    char *c;
};

static struct D a[] = {
    {
        "1a",
        "1b",
        "1c"
    },
    {
        "2a",
        "2b",
        "2c"
    }
};

我想确定数组中元素的数量,但sizeof(a)返回不正确的结果:48,而不是2.我做错了什么,或者sizeof这里根本不可靠?如果重要的话我正在使用GCC 4.4进行编译.



1> Grandpa..:

sizeof为您提供以字节为单位的大小,而不是元素的数量.正如Alok所说,为了获得元素的数量,将数组的字节大小除以一个元素的字节大小.正确的C语言是:

sizeof a / sizeof a[0]


一个替代的,仅仅是惯用的版本是`sizeof a/sizeof*a`

2> Alok Singhal..:
sizeof a / sizeof a[0];

这是一个编译时常量,因此您可以使用它来创建另一个数组:

#define N sizeof a / sizeof a[0]
int n_a[N];



3> 小智..:

sizeof返回传递元素的内存大小.通过将数组的大小除以单个元素大小,您可以获得元素计数.

注意,元素大小也可以包括一些填充字节.因此,填充结构(例如,当char成员后跟指针时)将具有sizeof大于其成员大小和的值.

另一方面,在计算数组中的元素时不要让它困扰你:sizeof(a) / sizeof(a[0])仍然会像预期的那样平滑.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有