使用sizeof()和struct

时间:2015-11-09 23:44:54

标签: c pointers struct sizeof

考虑

struct abc
{
int a;
int b;
};

sizeof(struct abc)sizeof(struct abc*)之间的区别是什么?

2 个答案:

答案 0 :(得分:2)

在您的示例中,如果您打印两个sizeof()操作的结果,它们可能都是相同的(这取决于您的系统),但这是巧合。如果更改结构的大小,则可以更清楚地看到差异。

#include <stdio.h>

struct abc
{
    int a;
    int b;
    int c;
};

int main(int argc, char *argv[])
{
    printf("sizeof(struct abc): %ld\n", sizeof(struct abc));
    printf("sizeof(struct abc *): %ld\n", sizeof(struct abc *));

    return 0;
}

这将打印(再次,取决于您的系统,但这是您将在64位unix上获得的):

sizeof(struct abc): 12
sizeof(struct abc *): 8

从中可以猜出差异:第一个显示结构的大小,第二个显示指针的大小。

答案 1 :(得分:1)

第一个sizeof将返回结构的大小,第二个返回计算机上指针的大小(可能是64位)。 很难猜测第一个sizeof将返回什么,因为struct可以有填充和/或对齐约束,这些约束因编译器而异,或者从ABI到ABI。