以下程序给出输出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));
}
答案 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
的对象。
因此,您的程序会调用未定义的行为,并且可以自由地执行(并打印)它想要的任何内容。