为什么&p和&a [0]不同?

Sle*_*der 5 c arrays printf pointers

#include <stdio.h>

int main(void) {
    int a[4][2] = { {11, 12}, {21, 22}, {31, 32}, {41, 42} };
    int *p = a[0];

    printf("%d\n", *p);

    printf("%d\n", p); 

    printf("%d\n", a[0]);

    printf("%d\n", &p);

    printf("%d\n", &a[0]);

    printf("%d\n", a); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

看看上面的代码.

在我的理解中,因为p等于a[0],&p并且&a[0]应该具有相同的值.

但实际输出如下:

11
1772204208
1772204208
1772204200
1772204208
1772204208
Run Code Online (Sandbox Code Playgroud)

为什么&p&a[0]不同?

什么是&p代表?

Swo*_*ish 12

&p产生指针的地址p,显然必须与地址不同a[0].


sag*_*agi 5

p是指向整数的指针.它存储在一个地址中,它还存储一个地址.

打印p将打印地址p点.

打印*p打印的价值p指向.

打印&p打印的地址p是唯一的,p并在声明时分配.

int *p_2 = &p;
Run Code Online (Sandbox Code Playgroud)

p_2 将具有相同的价值 &p

每个变量都有自己唯一的地址!