二维数组的地方不理解?


现在有一个二维数组
int array[2][[3]
int *ptr=array[0]
这里的ptr是指什么呢,array的第一行的第一个数组吗,即array[0][0]吗?
还是指array的第一行呢?那它的地址打印出来又是多少呢

*ptr才是array[0][0],其实二维也是一维,只不过是一维的元素是数组罢了。
ptr是int型指针,由于赋值要两边类型一样。所以后边的数组名array[0]相当于指针常量,指向数组第一个元素,即&array[0][0]。
数组array[0],里面有三个元素,array[0][0],array[0][1],array[0][2]。第一个元素就是array[0][0]。
如果ptr+1,那它就加了1个sizeof(*ptr)自身类型的字节,也就是一个int,会指向array[0][1]。
如果要指向第一行你应该这样赋值int (*ptr)[3]=array。那么array相当于&array[0],里面有三个元素。是个行指针。ptr是一个数组指针,指向一个有3个int元素的数组。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7551794
  • 这篇博客你也可以参考下:二维数组的地址
  • 除此之外, 这篇博客: 二重指针的理解中的 (1)二重指针指向一重指针的地址。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>

    int main()

    {

    int a = 10;

    int *P1;

    int **P2;

    P1 = &a;

    P2 = &P1;

    return 0;

    }