在内存中打印变量的地址

时间:2015-04-18 09:13:31

标签: 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);
}

当我使用%p时,我得到:i = 0xbfd08d5c的值 其他格式%d%x%u不起作用。

2 个答案:

答案 0 :(得分:5)

一般情况下,您不能使用%d%x%u作为地址。您应该只使用%p - 这是用于指针的唯一有效格式。

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

printf("\nAddress of i = %p", (void*)&i);

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

答案 1 :(得分:-1)

地址是一个正整数,因此,使用&#34;%u&#34; ,即unsigned int,可以打印正确的地址值。

p.s。,&#34;%p&#34;以十六进制格式和&#34;%u&#34;通用十进制格式。