这个问题说明了一切.在c中,当试图获取指针或其他东西的地址时,我知道命令:
%p
Run Code Online (Sandbox Code Playgroud)
和
0x%08x
Run Code Online (Sandbox Code Playgroud)
我知道他们都返回地址,但为什么要使用另一个?
看一下这个:
int main () {
int i[1] = {1};
int *int_pointer;
int_pointer = i;
printf("0x%08x\n",&i);
printf("0x%08x\n", int_pointer);
printf("%p\n",&i);
printf("%p\n", int_pointer);
}
Run Code Online (Sandbox Code Playgroud)
此代码产生此响应:0x60506b00 0x60506b00 0x7ffe60506b00 0x7ffe60506b00
如果两者都引用地址,那么它们是如何不同的,具体取决于你是使用%p还是0x%08x?
实际地址是哪个?
asc*_*ler 10
printf("%p", p)期望void*指针作为参数. printf("0x%08x", n)期待一个unsigned int参数.
如果一个unsigned int和一个指针在它们的堆栈表示中"足够相似",那么将指针传递给后者可能无论如何都可以工作.但无论你的机器是什么,为了安全和正确,总是使用"%p"指针.