-1
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

4 回答 4

2

[...] 和 [...] 有什么区别?

一个星号。而且,如果您尝试将其s2用于存储student_simple结构,您将获得未定义的行为。

大小为 8 字节的 malloc 如何将 student_simple 结构存储在 s2 中?

它不能。为什么你认为它可以?

于 2013-04-23T06:03:58.133 回答
2

sizeof(struct student_simple *)给出指向 的指针的大小student_simple,但 sizeof(struct student_simple )给出类型为 的结构变量的大小student_simple

于 2013-04-23T06:05:06.563 回答
1

未定义的行为是未定义的。任何事情都可能发生,包括正确行为的出现。使用s3表格,它是正确的。

于 2013-04-23T06:03:04.497 回答
1

sizeof(any_Structure_Pointer)将给出 8 或 4 这是编译器的基础。但是sizeof(YOUR_Structure)会给出在结构中声明的所有数据类型的大小。

如果您有疑问,请检查sizeof(int*), sizeof(void*)...。这将给出 8 或 4 ..

于 2013-04-23T06:04:31.020 回答