在内存中打印变量的地址

sun*_*unp 1 c pointers

#include<stdio.h>
main() {
    int i=9;

    printf("\nAddress of i = %d", &i);
    printf("\nAddress of i = %x", &i);
    printf("\nAddress of i = %u", &i);
    printf("\nAddress of i = %p", &i);
    printf("\nValue of i = %d",i);
}
Run Code Online (Sandbox Code Playgroud)

当我使用%p我得到:价值i= 0xbfd08d5c
其他格式%d,%x,%u不工作.

das*_*ght 5

在一般情况下,你不能使用%d,%x或者%u一个地址.您应该只使用%p- 这是用于指针的唯一有效格式.

此外,由于%p需要一个void指针,你需要为&i操作添加一个强制转换:

printf("\nAddress of i = %p", (void*)&i);
Run Code Online (Sandbox Code Playgroud)

尽管在大多数平台上代码都可以在没有强制转换的情况下工作,但最好添加一个强制转换来保证与指向一个int和一个void指针的指针具有不同表示的平台的兼容性.我不确定是否有这样的平台,但标准并没有禁止它们.