Почему эти переносы указателя приводят к разным результатам?

#c #pointers #struct #typedef

#c #указатели #структура #typedef

Вопрос:

Допустим, у меня есть некоторые typedef struct {int b;} some_t; и указатель a на такую структуру. Тогда почему

 (*a).b = 5;
  

не то же самое, что

 some_t c = *a;
c.b = 5;
  

?

Ответ №1:

Во втором, c является копией *a , а c.b является копией (*a).b .

c.b = 5 изменяет копию, а не оригинал.

Комментарии:

1. Насколько тогда уместно выбрать ‘c’ в качестве имени. 😉 Теперь все ясно, спасибо!

2. Я думаю, вы имеете в виду, что c.b эквивалентно (* a).b , а не копия.

3. @Daniel: Нет, это копия значения.

4. Но (*a).b != c.b, но он имеет такое же поведение с точки зрения доступа к элементу… где, поскольку я прочитал ваше утверждение как противоположное, следовательно, инструкции эквивалентны, хотя и структурам по разным адресам. Бах, английская семантика…