Разница между p2 = p1 и * p2 = * p1 - PullRequest
0 голосов
/ 07 ноября 2018

Код отсюда: http://www.cplusplus.com/doc/tutorial/pointers/

#include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed to by p1 = 10
  *p2 = *p1;         // value pointed to by p2 = value pointed to by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed to by p1 = 20

  cout << "firstvalue is " << firstvalue << '\n';
  cout << "secondvalue is " << secondvalue << '\n';
  return 0;
}

Мой вопрос в указателях. * p2 = * p1 означает, что p2 теперь указывает на любое значение, на которое указывает p1. Тем не менее, p2 = p1 означает, что значение p1 теперь копируется в p2. Как его можно скопировать в него, если указатель не может содержать сами значения? Разве это не просто указывает на то же значение?

1 Ответ

0 голосов
/ 07 ноября 2018

Полагаю, вы имеете в виду p1 = p2 (то есть значение p2 копируется в p1). Указатели содержат адреса в (виртуальной) памяти.

Таким образом, p1 теперь содержит значение p2, которое является адресом второго значения. В

*p1 = 20;

Значение по адресу памяти p1 (то же самое, что и p2) теперь принимает значение 20.

firstvalue остается неизменным и на него больше не ссылается ни один из двух указателей p1 и p2

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