这个结构的大小是多少?为什么?

时间:2013-06-23 06:24:40

标签: c

以下程序给出输出4.我认为它将输出8 sizeof(int)+ sizeof(unsigned int)

#include<stdio.h>
#include<stdlib.h>
int main()
{
        struct node
        {
                int a;
                struct node * next;
        };
        struct node * p= (struct node *) malloc( sizeof( struct node));
        printf("%d", sizeof( p));
}

3 个答案:

答案 0 :(得分:2)

在这段代码中,p是一个指针,所以你只是打印一个指针的大小(在编译器/ OS组合中显然是4个字节)。如果您想要结构的大小,则需要打印sizeof(*p)。另外,正如所指出的,对size_t使用“%d”不一定有效(“%zu”是正确的,尽管%d将在现实世界中的大多数编译器/操作系统上)。此外,您不应该假设结构的大小“应该”为8.指针可能更大,或者编译器可能想要以某种奇怪的方式填充或对齐结构。

答案 1 :(得分:1)

p只是一个指针。它的大小取决于ABI,在你的情况下 4

答案 2 :(得分:1)

正确回答:您的输出(如果有)是不确定的,因为您在调用printf()时使用了错误的格式说明符。您应该使用%zu代替sizeof()生成类型为size_t的对象。

因此,您的程序会调用未定义的行为,并且可以自由地执行(并打印)它想要的任何内容。