C - Распределение памяти с указанием, почему символ * идет до и после - PullRequest
0 голосов
/ 28 мая 2018

Я новичок в C и знаю, что * это указатель.

 Person * father = (Person *) malloc(sizeof(Person));
 Marriage * marriage = (Marriage *) malloc(sizeof(Marriage));
 (* marriage).male = father;

Мой вопрос заключается в том, почему * иногда приходит до, а иногда после?В чем причина?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Итак, исходный код был:

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 символа в качестве -> вместо добавления и добавления всех этих (* и ). вокруг имени переменной.И конечный результат точно такой же.

0 голосов
/ 28 мая 2018

Person * - указатель на тип Person
(Person *) - приведение типа C к указателю на тип Person (читайте о приведении типа, если вы незнакомы)
(* marriage) - разыменованиеуказатель брака, который в основном обращается к переменной, хранящейся в ячейке памяти, на которую указывает указатель.Также подсказка: поскольку брак кажется указателем на структуру и вы получаете доступ к члену этой структуры, вы можете избежать синтаксиса (*marriage).male и использовать оператор ->, например, marriage->male

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