Dev C ++ дает другой результат в случае адреса указателя - PullRequest
1 голос
/ 27 декабря 2011

У меня есть следующий набор кодов

int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", &p1); 
   return 0;
}

дает

Addresses pointed to by p1 gives 0028FF480

   int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", p1); 
   return 0;
   }

Адреса, на которые указывает р1, дают 00000000

Почему такая разница? .. Я думал, что оба дадут мне одинаковое значение.

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

И то, и другое отличается, следовательно, разница в выходе.

p1 возвращает адрес переменной, на которую указывает указатель.

&p1 возвращает адрес, на котором хранится указатель p1 в памяти.

1 голос
/ 27 декабря 2011

Изначально p1 хранит адрес x (который вы получили с помощью &x).Позже вы установите p1 для хранения нулевого адреса.

В первом фрагменте вы решили напечатать не адрес сохраненный в p1, а адрес p1 сам .p1 - это переменная, как и любая другая, и, как и остальные, &p1 даст вам адрес этой переменной.Это отличается от значения, хранящегося в нем, которое доступно с помощью p1 и является тем, что печатает второй фрагмент.

I like pictures

Как и любая другая переменная, вы не можете изменить адреспеременная p1, вы можете изменить только значение, которое она хранит, и в случае указателя это просто так, что значение является адресом.

0 голосов
/ 27 декабря 2011
p1=0;

установит указатель, который указывает на «p1», на ноль, а не на его содержимое, которое должно быть сделано

*p1=0;
...