C:为什么指针和指针有不同的值?

Pyd*_*man 1 c pointers memory-address

如果我在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;
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

n:1592302 512,n&:1592302 480

为什么不同的价值观?

jua*_*nza 5

为什么pointer&pointer有不同的价值观?

表达式&n产生n自身的地址,同时n计算指针的,即它指向的东西的地址.

但请注意,您有未定义的行为首先,因为您正在取消引用未初始化的指针.你需要在n某处写点.

例如,

int* n;
int i = 42;
n = &i;

// now you can de-reference n
*n = 20;
Run Code Online (Sandbox Code Playgroud)

其次,你有错误的printf说明符&n.你需要%p:

printf("n: %i, &n: %p\n", n, &n);
Run Code Online (Sandbox Code Playgroud)