Как получить адрес указателя в c/С++?

Как получить адрес указателя в c/С++?

Например: у меня есть код ниже.

int a =10;
int *p = &a;

Итак, как мне получить адрес указателя p? Теперь я хочу напечатать адрес p, что мне делать?

print ( "% s",???), что я передаю???.

Ответы

Ответ 1

Чтобы получить адрес p, выполните:

int **pp = &p;

и вы можете продолжить:

int ***ppp = &pp;
int ****pppp = &ppp;
...

или, только в С++ 11, вы можете сделать:

auto pp = std::addressof(p);

Чтобы напечатать адрес на C, большинство компиляторов поддерживают %p, поэтому вы можете просто сделать:

printf("addr: %p", pp);

в противном случае вам нужно отбросить его (предполагая 32-битную платформу)

printf("addr: 0x%u", (unsigned)pp);

В С++ вы можете:

cout << "addr: " << pp;

Ответ 2

int a = 10;

Чтобы получить адрес a, выполните следующие действия: &a (адрес a), который возвращает int* (указатель на int)

int *p = &a;

Затем вы сохраняете адрес a в p, который имеет тип int*.

Наконец, если вы делаете &p, вы получаете адрес p, который имеет тип int**, то есть указатель на указатель на int:

int** p_ptr = &p;

только что видел ваше редактирование:

чтобы распечатать адрес указателя, вам нужно либо его преобразовать:

printf("address of pointer is: 0x%0X\n", (unsigned)&p);
printf("address of pointer to pointer is: 0x%0X\n", (unsigned)&p_ptr);

или если ваш printf поддерживает его, используйте %p:

printf("address of pointer is: %p\n", p);
printf("address of pointer to pointer is: %p\n", p_ptr);

Ответ 3

&a дает адрес a - &p дает адрес p.

int * * p_to_p = &p;

Ответ 4

Вы можете использовать форматер %p. Перед печатью всегда рекомендуется применить указатель void*.

В стандарте C говорится:

Аргумент должен быть указателем на void. Значение указателя преобразуется в последовательность символов печати в соответствии с реализацией.

Вот как вы это делаете:

printf("%p", (void*)p);

Ответ 5

Вы можете использовать% p в C

В C:

printf("%p",p)

В С++:

cout<<"Address of pointer p is: "<<p

Ответ 6

вы можете использовать этот

в C

int a =10;
int *p = &a;     
int **pp = &p;
printf("%u",&p);

в С++

cout<<p;

Ответ 7

Наличие этого источника C:

int a = 10;
int * ptr = &a;

Используйте этот

printf("The address of ptr is %p\n", (void *) &ptr);

чтобы напечатать адрес ptr.

Обратите внимание, что спецификатор преобразования p является единственным спецификатором преобразования для печати значения указателя и, который определен для использования с void* типизированными указателями.

Из man printf:

p

Аргумент указателя void * печатается в шестнадцатеричном виде (как будто               % #x или% #lx).