问题说明了一切。
在c中,当尝试获取指针或其他内容的地址时,我知道以下命令:
%p
和
0x%08x
我知道他们俩都返回地址,但是为什么要一个一个地使用呢?
看一下这个:
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);
}
此代码产生以下响应:
0x60506b00
0x60506b00
0x7ffe60506b00
0x7ffe60506b00
如果两者都引用地址,那么根据使用%p还是0x%08x的不同,它们又会有什么不同?
实际地址是哪个?
最佳答案
printf("%p", p)
需要void*
指针作为参数。 printf("0x%08x", n)
需要unsigned int
作为参数。
只要unsigned int
和指针在堆栈中的表示“足够相似”,将指针传递给后者可能仍然可行。但是为了安全正确起见,无论您的机器是什么,请始终将"%p"
与指针一起使用。
关于c - %p和0x%08x有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33324673/