Как получить адрес указателя в 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).