#c #syntax
#c #синтаксис
Вопрос:
Я просматриваю практические занятия для своего курса по операционным системам, и я не могу разобраться в этом примере. Я запустил программу, и она не работает.
#include <stdio.h>
typedef struct {
int age;
float height;}Person;
void init(Person *);
int main() {
Person *Callum;
Callum = malloc(sizeof(*Callum));
init(Callum);
printf("Age: %d, height: %fn", Callum.age, Callum.height);}
void init(Person * individual)
printf("Age: "); scanf("%d", amp;(individual->age));
printf("Height: "); scanf("%f", amp;(individual->height));}
Я попытаюсь объяснить, что, по моему мнению, происходит, и если бы вы могли исправить мою логику, я был бы очень благодарен:
- У нас есть указатель с именем Callum типа Person .
- ‘Callum = malloc(sizeof(*Callum));’ => Означает ли это, что нашей переменной callum был выделен объем памяти нашей структуры в куче?
- Человек указывает на нашу переменную Callum. Редактировать: Извините, я запутался, набрав его, я имел в виду, что individual указывает на нашу структуру Person.
- Программа считывает входные данные и присваивает им адрес individual, который является местоположением нашей переменной Callum. Затем мы печатаем значения Callum.
Извините, это потрясает мой мозг. Я знаю основную механику структуры и указателя, но я просто не могу представить, что происходит. Любая помощь будет оценена. Спасибо.
Комментарии:
1. «Person указывает на …» —
Person
это тип , а не указатель, поэтому неверно.2. для имен переменных следует использовать нижний регистр
3. Этот беспорядок нечитаем. Узнайте о наборе отступов, используйте
indent
перед публикацией.
Ответ №1:
Вам нужно сделать:
printf("Age: %d, height: %fn", Callum->age, Callum->height);}
Ответ №2:
В вашем коде,
void init(Callum * individual)
неверно. Вам нужно написать
void init(Person * individual)
как Person
и тип данных. Кроме того, функция должна быть заключена в фигурные скобки, такие же, как main()
.
Кроме того, в вашем main()
, в качестве Callum
типа указателя is, вы должны использовать оператор разыменования элемента указателя ->
printf("Age: %d, height: %fn", Callum->age, Callum->height);
Тем не менее, что касается вопросов
Callum = malloc(sizeof(*Callum));
=> Означает ли это, что нашей переменнойcallum
был выделен объем памяти нашегоstruct
в нашей куче?
- Да, до тех пор, пока
malloc()
это успех.
- Человек указывает на нашу переменную Callum
- На самом деле нет. Правильный способ выражения —
Callum
это переменная типа указатель наPerson
.
Комментарии:
1. Примечание: OP изменил вопрос, сделав ваш ответ (частично) недействительным. На этот раз я оставлю это вам для отката:-)