Я изо всех сил пытаюсь понять указатели на структуры, поэтому я написал пример кода с несколькими заявлениями печати.Элементы Struct не обновляются с помощью указателя на struct
struct Student {
uint32_t id;
uint8_t marks[8];
int32_t credit;
};
struct Student jacob;
struct Student *adam = &jacob;
struct Student mary = *adam;
mary.marks[3] = 80;
jacob.marks[3] = 75;
adam->marks[3] = 67;
printf("jacob: %d\n", jacob);
printf("&jacob: %d\n", &jacob);
printf("adam: %d\n", adam);
printf("*adam: %d\n", *adam);
printf("mary: %d\n", mary);
printf("mary.marks[3]: %d\n", mary.marks[3]);
Выход:
jacob: 4195856
&jacob: -436012784
adam: -436012784
*adam: 4195856
mary: 4195856
mary.marks[3]: 80
Почему значение mary.marks[3]
80? Из того, что я понимаю, mary
косвенно указывает на struct jacob
, так как adam
указывает на адрес jacob
. Поэтому строка adam->marks[3] = 67
изменит значение mary.marks[3]
, так как они указывают на то же местоположение.
Может кто-то, пожалуйста, помогите мне понять, почему значение mary.marks[3]
остается неизменным?
"mary косвенно указывает". Это не может быть правдой. 'mary' не является указателем. 'mary' содержит * копию * того, что указывает адам. – kaylum
Вы не инициализировали содержимое 'jacob', поэтому то, что вы копируете (при назначении' * adam' 'mary') не определено. Вы должны правильно печатать адреса. Вы не должны передавать 'jacob'' 'printf()' (или '* adam', или' mary'). –
p.s. Для справок в будущем вы должны предоставить полный пример, который мы можем скомпилировать. В частности, вам не хватает 'main()'. –