Хранение указателя внутри указателя - PullRequest
0 голосов
/ 08 июня 2018

int  var = 5;


int  *intptr = &var;

int *intptr1 = intptr;

std::cout << "adress of var   : " << intptr << std::endl;   //0x00EFFB05
std::cout << "adress of var   : " << &var << std::endl;     //0x00EFFB05
std::cout << "value of var    : " << var << std::endl;      // 5
std::cout << "value of var    : " << *intptr << std::endl;  // 5
std::cout << "adress of intptr: " << &intptr << std::endl;  //0x00EFFB44
std::cout << "adress of var   : " << intptr1 << std::endl;  //0x00EFFB05 /In my unterstanding, the adress of intptr should be here, instead we have the adress of var

В строке, где я назначаю "var" указателю "intptr", адрес var становится значением указателя.

В строке, где я присваиваю свой указатель «intptr» указателю «intptr1», адрес «intptr» не становится значением «intptr1», но вместо этого ЗНАЧЕНИЕ «intptr» становится значением «intptr1», который является адресом var.

1: Почему это изменение логики при назначении указателя на указатель?

2: И как мне сохранить адрес "intptr" в "intptr1" ?

1 Ответ

0 голосов
/ 08 июня 2018

Нет изменений в логике.Если вы хотите назначить адрес, вам нужно использовать оператор адреса (&).Вы сделали это для var, но не для intptr, поэтому вы получите именно то, что просили.

Попробуйте int **intptr1 = &intptr;.Обратите внимание на разницу в объявлении типа.intptr1 не является указателем на int;это указатель на указатель на int.

...