以下代码的结果是什么:
我知道
print(2+3*4)
int* ptr;
printf("%x, %x\n", ptr, &ptr);
我知道
ptr
是内存中的一个地址,但&ptr
是什么?&ptr将成为保存ptr的内存位置的地址。本质上它是一个指向指针的指针。
它是包含原始内存地址的内存位置的地址(即它是“指向指针”的指针)。
&ptr
返回指针变量的地址... 如果你愿意的话,它是指向指向器的指针。
这通常用于允许函数改变指针实际指向的位置。
ptr
不仅仅是“内存中的地址”。ptr
是一个 lvalue,是一个保存地址的内存中的对象。无论它所保存的内容是什么,每个内存中的对象都有自己的地址。
由于 ptr
是内存中的一个对象,它也有自己的地址。当你执行 &ptr
时,得到的就是它的地址。
ptr + i*sizeof(int)
这样的偏移量,这实际上并不是指针乘法。 - goatlinks&ptr 只能存储在 int **var
或双指针变量中,因此 &ptr 实际上是包含另一个地址的 ptr 的地址。
int x= 3;
,那么&x
不是指向3
的地址,而是指向x
的指针。 - Pete Kirkham