指针地址如何具有不同的长度?

mat*_*ath 1 c pointers c99 pointer-address

我刚刚执行了这个代码示例:

int *i = (int*) malloc( sizeof(int) );
printf( "%p, %p\n", &i , i );
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

0x7fff38fed6a8, 0x10f7010
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么第二个地址比第一个地址短?

Pau*_*l R 5

i在堆栈上,而它指向的内存块在堆中.在你的平台上,这是两个非常不同的内存区域,它恰好在堆数addess相对较低的数字上,所以它有很多未显示的前导零,即

&i = 0x7fff38fed6a8; // stack
 i = 0x0000010f7010; // heap
Run Code Online (Sandbox Code Playgroud)