Вопрос о разнице в распределении памяти во фрагментах кода? - PullRequest
0 голосов
/ 14 октября 2018

Может кто-нибудь объяснить разницу в том, почему выделение памяти для структур здесь отличается?Спасибо.

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));

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

struct Node - это typedefd to Node, поэтому sizeof (Node) допустим, потому что нет typedef для Person, который вы не используете sizeof (Person).Приведение к (Node *) на malloc не является необходимым, C позволяет приводить из void * к указателям других типов объектов без приведения (и многие люди рекомендуют против него).

0 голосов
/ 14 октября 2018
sizeof(Person) == sizeof(char*) + 3*sizeof(int) == 16
sizeof(Node) == sizeof(int) + sizeof(Node*) == 8

В c все указатели имеют одинаковый размер.Предполагая 32-битную систему, это 4 байта, как обычный int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...