C указатели не показывают по одному адресу?* Ра = а;ра = & а;pa! = & pa - PullRequest
0 голосов
/ 11 мая 2019

Почему это не тот же адрес памяти? Это в с.

  int *pa;    
  int a = 80;
  pa = &a; //save memory address from a to pa
  *pa = 1000; //assign value to that address; *pa and a have now the same value

%p... memory address
%d... decimal

  printf ("a: %d \n", a); //100    
  printf ("*pa: %d \n", *pa); //100
  printf ("pa: %p \n", pa);   //0x7ffcd1370c54
  printf ("&a: %p \n", &a);   //0x7ffcd1370c54
  printf ("&pa: %p \n", &pa); //0x7ffcd1370c60

& pa всегда на 6 больше, чем pa.

Разве pa, & pa, & a не должны иметь один и тот же адрес?

Ответы [ 2 ]

3 голосов
/ 11 мая 2019

&pa на самом деле адрес PA, pa - это значение pa, то есть адрес

Они разные.

1 голос
/ 11 мая 2019

pa - указатель. Этот указатель содержит ссылку (адрес) a

&pa является ссылкой (адресом) самого указателя pa и, конечно, отличается от значения, которое содержит этот указатель.

Вы, вероятно, смущены массивами. Массивы только переводят указатели в указатели, и они сами не являются указателями.

int arr[5];

и arr == &arr но у них разные типы.

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