Итак, исходный код был:
Person * father = (Person *) malloc(sizeof(Person));
Marriage * marriage = (Marriage *) malloc(sizeof(Marriage));
1) Позвольте установить явные границы между типом и переменной в каждой строке
(Person *) father = (Person *) malloc(sizeof(Person));
(Marriage *) marriage = (Marriage *) malloc(sizeof(Marriage));
Видите?Итак, здесь у нас есть тип, объединенный со звездочкой, и он говорит компилятору: «Эй, этот парень - указатель на тип».И мы используем тот же тип с правой стороны для преобразования очень общего (void *) в точный тип.
2) Пора использовать то, что мы выделили.Я мог бы сказать, что ваша оригинальная версия не так широко распространена из-за чрезмерного синтаксиса (это вас смущает наверняка):
(* marriage).male = father;
Более предпочтительный способ - сказать следующее:
marriage->male = father;
Всего 2 символа в качестве ->
вместо добавления и добавления всех этих (*
и ).
вокруг имени переменной.И конечный результат точно такой же.