1. int a[4][5], (*p)[5]; 这两条语句定义了一个二维数组a和一个指向一维数组的指针p。二维数组a有4行5列,指针p指向一维数组的指针,该一维数组有5个元素。

  2. (*p)[5] 是一个指向一维数组的指针。方括号内的5表示该一维数组有5个元素,这个值需要和二维数组a的列数一样。这样定义的指针p可以指向二维数组a的任意一行。

  3. p+1 表示将指针p向后移动1个一维数组的长度。由于一维数组的长度是5,所以p+1就指向了二维数组a的下一行。

  4. *(p+1) 表示指针p+1指向的一维数组的首地址。即第二行的首地址。

  5. p[2][3] 表示指针p指向的二维数组的第3行第4列的元素。由于p指向二维数组a的首地址,所以p[2][3]等价于a[2][3],表示二维数组a的第3行第4列的元素。

  6. ((a+2)+1) 表示二维数组a的第3行第2列的元素。a+2表示指针a向后移动2个一维数组的长度,即指向第3行。(a+2)+1表示第3行的首地址向后移动1个元素的长度,即指向第3行第2列的元素。最后的表示取出该元素的值。

举例说明:

int a[4][5] = {
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20}
};

int (*p)[5]; // 定义一个指向一维数组的指针

p = a; // 将指针p指向二维数组a的首地址

int *ptr = *(p+1); // ptr指向第二行的首地址

int value = p[2][3]; // value等于第3行第4列的元素,即13

int value2 = *(*(a+2)+1); // value2等于第3行第2列的元素,即12

可以看到,指针p可以通过移动指针的方式访问二维数组a的不同行,而*p可以通过指针取值的方式访问二维数组a的元素,和普通二维数组的引用方式是一样的。

c语言中 int a45p5;p=a;这两条语句是什么意思详细解释p5是什么意思?是数组指针吗?方括号内必须和二维数组a的列数一样吗p+1代表什么?p+1代表第二行整体的元素地址还是第二行第一个元素的地址还是第一行第一个元素的数值?p23代表什么?a+2+1代表什么为什么和普通二维数组引用元素的方式一样?详细举例说明

原文地址: https://www.cveoy.top/t/topic/i6ar 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录