如果我在 OS X 上运行以下命令:
int main (void)
{
int* n; // initialise(declare) pointer
*n = 20; // the value in address pointed to by n is 20
printf("n: %i, n&: %i\n", n, &n);
return 0;
}
我得到:
n: 1592302512, n&: 1592302480
为什么会有不同的值?
最佳答案
Why do
pointer
and&pointer
have different values?
表达式 &n
产生 n
本身的地址,而 n
求值为指针的 value ,即它指向的事物的地址。
但请注意,您有未定义的行为 首先,因为您取消引用了一个未初始化的指针。你需要让 n
指向你可以写入的地方。
例如,
int* n;
int i = 42;
n = &i;
// now you can de-reference n
*n = 20;
其次,您为 &n
使用了错误的 printf
说明符。您需要 %p
:
printf("n: %i, &n: %p\n", n, &n);
关于C: 为什么pointer和&pointer有不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418854/