-1

以下程序给出输出 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));
}
4

3 回答 3

2

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

于 2013-06-23T06:28:42.490 回答
1

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

于 2013-06-23T06:28:05.753 回答
1

正确答案:您的输出(如果有)是不确定的,因为您在调用printf(). 您应该使用%zu-sizeof()产生一个类型的对象size_t

因此,您的程序会调用未定义的行为,并且它可以自由地做(和打印)它想做的任何事情。

于 2013-06-23T06:30:10.570 回答