首页 > 解决方案 > 为什么 &p 和 &a[0] 不同?

问题描述

#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;
}

看上面的代码。

在我的理解中,因为equals 和p应该a[0]具有相同的值。&p&a[0]

但实际输出如下所示:

11
1772204208
1772204208
1772204200
1772204208
1772204208

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

代表什么&p

标签: carrayspointersprintf

解决方案


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


推荐阅读