C 关于代码段中分配内存的差异的问题?

C 关于代码段中分配内存的差异的问题?,c,struct,C,Struct,有人能解释为什么分配给结构的内存在这里是不同的吗? 谢谢 vs 在c语言中,所有指针的大小都相同。假设是32位系统,它是4个字节,作为常规的整数。struct Node是typedefd to Node,因此sizeofNode是合法的,因为没有typedef供您不做sizeofPerson的人使用。malloc上对Node*的强制转换是不必要的,C允许从void*强制转换到其他对象类型指针,而无需强制转换,很多人建议不要这样做。除了大小不同之外,我看不出有什么区别。你指的是哪一种不同?你是在问

有人能解释为什么分配给结构的内存在这里是不同的吗? 谢谢

vs


在c语言中,所有指针的大小都相同。假设是32位系统,它是4个字节,作为常规的整数。

struct Node是typedefd to Node,因此sizeofNode是合法的,因为没有typedef供您不做sizeofPerson的人使用。malloc上对Node*的强制转换是不必要的,C允许从void*强制转换到其他对象类型指针,而无需强制转换,很多人建议不要这样做。

除了大小不同之外,我看不出有什么区别。你指的是哪一种不同?你是在问为什么一个从malloc转换返回而另一个不转换,还是你真的想知道类型一个使用指向结构的typedef的指针,另一个只使用指向结构的指针?铸造是可选的,通常不建议在C。。。否则,内存分配方式相同。您是指sizeofstruct Person吗?不要忘记结构成员填充的可能性。假设每个成员的大小之和是危险的:sizeof是正确的工具。这是如何回答这个与大小无关的问题的?C实现中的指针通常具有相同的大小,但这不是C标准所要求的;它依赖于实现。指针的大小、int的大小或系统所谓的“32位”性质之间的关系也没有任何要求。指向结构的指针必须彼此具有相同的大小,指向联合的指针必须彼此具有相同的大小,指向兼容类型的指针必须彼此具有相同的大小,否则,指针可能具有不同的大小和内部表示形式。
typedef struct Node{
int data;
struct Node *next;
}Node;

Node *newNodePtr = (Node*)malloc(sizeof(Node));
struct Person {
char *name;
int age;
int height; 
int weight;
};

struct Person *who = malloc(sizeof(struct Person));
sizeof(Person) == sizeof(char*) + 3*sizeof(int) == 16
sizeof(Node) == sizeof(int) + sizeof(Node*) == 8