没有printf%p的变量的输出地址

Kba*_*am7 1 c printf

我是C编程的一年级学生,所以我的技能/知识有限.我正在尝试创建自己的实现printf,但我在检索和打印变量的地址时遇到问题.有了printf,它可以输出变量的地址%p,我需要以%p某种方式复制.

当存储变量的地址时,数据类型是int*,我无法弄清楚如何将此地址写入屏幕(stdout).

例如:

int i        = 123;
int *address = &i;
Run Code Online (Sandbox Code Playgroud)

现在我将如何输出address(而不是值i)?我尝试使用原始printf格式说明符进行测试.我尝试使用%x,%s,%d,%lu ...这一切都给了我一个错误,因为我试图输出一个int*(整数指针).

任何人都可以协助我输出地址吗?

250*_*501 5

您只能使用unsigned char类型检查指针的位并打印它们:

unsigned char* a = ( unsigned char* )address;
for( size_t i = 0 ; i < sizeof( address ) ; i++ )
     printf( "%hhu" , a[i] );
Run Code Online (Sandbox Code Playgroud)

如果指针是指向对象的指针,则另一个选项是将指针强制转换为types:intptr_tuintptr_t,但这些类型的可用性是实现定义的.