我是C编程的一年级学生,所以我的技能/知识有限。我正在尝试在printf
上创建自己的实现,但是我在检索和打印变量的地址时遇到了麻烦。使用printf
,可以使用%p
输出变量的地址,我需要以某种方式复制%p
。
存储变量的地址时,数据类型为int*
,我无法弄清楚如何将此地址写入屏幕(stdout)。
int i = 123;
int *address = &i;
现在我如何输出address
(不是i
的值)?我尝试使用原始的printf
格式说明符进行测试。我尝试使用%x,%s,%d,%lu ...当我尝试输出int*
(整数指针)时,它都会给我一个错误。
有人可以协助我输出地址吗?
答案 0 :(得分:5)
您只能使用unsigned char:
类型检查指针的位并打印它们unsigned char* a = ( unsigned char* )address;
for( size_t i = 0 ; i < sizeof( address ) ; i++ )
printf( "%hhu" , a[i] );
如果指针是指向对象的指针,则另一个选项是将指针强制转换为类型:intptr_t
或uintptr_t
,但这些类型的可用性是实现定义的。
答案 1 :(得分:4)
如果它是对象的地址,您可以执行以下操作:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
int a;
uintptr_t uip = (uintptr_t) ((void*) &a);
printf("address of a = 0x%"PRIXPTR, uip);
}
要打印您需要的功能地址as proposed here。