sizeof(struct tag *)和sizeof(struct tag)之间的区别

时间:2013-04-23 06:01:39

标签: c struct sizeof

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 

4 个答案:

答案 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 ..