указатель на адрес указателя - PullRequest
0 голосов
/ 01 ноября 2018

У меня вопрос по поводу указателя на указатель.

Вот мой код

#include <stdio.h>

void main()
{
    int num=10;
    int *numPtr1;
    int **numPtr2;

    numPtr1 = &num;
    numPtr2 = &numPtr1;
    printf("%d\n", num);
    printf("%d\n", *numPtr1);
    printf("%d\n", **numPtr2);
    printf("%p\n", &num);
    printf("%p\n", numPtr1);
    printf("%p", numPtr2);
}

Почему адрес numPtr2 не совпадает с адресом numPtr1, numPtr2? Например, пусть адрес num 0x7fffaca780b4. Затем, когда я запускаю этот код, вывод

10
10
10
0x7fffaca780b4
0x7fffaca780b4
0x7fffaca780b8

Извините за мой плохой английский

Ответы [ 3 ]

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

Почему адрес numPtr2 не совпадает с адресом numPtr1, numPtr2?

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

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

numptr2 указывает на переменную numptr1, numptr1 указывает на num. Таким образом, в numptr2 будет сохранен адрес numptr1, а в numptr1 будет сохранен адрес num оба (numptr1,num) адреса разные. это причина того, что вы получаете другой адрес.

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

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

...