struct student_simple
{
int rollno;
char *name;
};
之间的区别
struct student_simple *s2 = malloc(sizeof(struct student_simple *));
struct student_simple *s3 = malloc(sizeof(struct student_simple ));
我可以同时使用s2和s3但没有任何问题,但是当我检查gdb中的大小时
gdb$ p sizeof(struct student_simple) gives 16
gdb$ p sizeof(struct student_simple *) gives 8
答案 0 :(得分:2)
[...]和[...]之间有什么区别?
星号。如果您尝试使用s2
来存储student_simple
结构,那么您将获得未定义的行为。
大小为8字节的malloc如何存储student_simple结构,如s2?
它不能。为什么你认为它可以?
答案 1 :(得分:2)
sizeof(struct student_simple *)
给出指向student_simple
的指针的大小,但是
sizeof(struct student_simple )
给出了student_simple
类型的结构变量的大小。
答案 2 :(得分:1)
未定义未定义的行为。任何事情都可能发生,包括正确行为的出现。使用s3
表单,这是正确的。
答案 3 :(得分:1)
sizeof(any_Structure_Pointer)
将给出8或4个编译器库。但是sizeof(YOUR_Structure)
将给出在结构中声明的所有数据类型的添加大小。
如果您有疑问,请查看sizeof(int*), sizeof(void*)...
。这将给8或4 ..