林中小道 发表于 2019-7-15 10:36:52

为什么二维数组a[2][2], a和*a输出是相同的地址

#include <stdio.h>
int main(void)
{
        int a = {{1,2},{1,2}};       

        printf("%p\n",a);
      printf("%p\n",*a);   
   
        return 0;      
}

如书上说的a如果是一维数组首元素地址的话。*a应该是首元素本身吧,也就是数组{1,2},
不过printf函数好像是不能输出整个数组的,想请问各位printf是怎么处理*a的输出的,从而使得输出的是和a一样的地址。

我就是个弟弟 发表于 2019-7-15 11:12:41

#include <stdio.h>

int main()
{
    int a = {11, 22, 33, 44};

    // a 第一个元素的地址
    // *a是第一个元素 这里的第一个元素是数组 {11, 22}
    // *(*a)是 第一个元素(数组)的第一个元素 (11)
    printf("a = %p\n", a);
    printf("*a = %p\n", *a);
    printf("**a = %d\n", **a);

    return 0;
}

AmosAlbert 发表于 2019-7-16 17:39:27

我运行了一下a和*a输出是相同的地址。没错数组名就是首元素地址。二维数组是指向一维数组的指针组成指针数组。
所以从类型上讲,a是指向指针的指针,*a就是指向一维数组的指针。*a是第一行数组首地址。所以值相同,但意义不同。

AmosAlbert 发表于 2019-7-19 11:02:16

记得采纳哦

心驰神往 发表于 2020-11-3 16:03:43

懵了
页: [1]
查看完整版本: 为什么二维数组a[2][2], a和*a输出是相同的地址