【指针的指针与指针数组及二维数组】二维数组求和

无思路,求解(@#1等效于空格需要填入代码,两个@@1之间要填入代码)

img


题目源代码

#include"stdio.h"
main()
{
    int a[3][4],r,i,j;
    int *p[3];
    int **q;
   
    for(i=0;i<3;i++)
        @#1=a[i];  //指针数组p的每个单元格都指向二维数组的每一行的第一个单元格
    q=@#2       //q指向p数组首元素
   
    for(i=0;i<3;i++)     //通过指针数组输入二维数组单元格的内容
        for(j=0;j<4;j++)
            scanf("%d",p[i]@#3);
          //利用指针的指针q求二维数组的和
    r=0;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++) 
        r=r+ *(@#4);
    printf("%d\n",r);
}

#include"stdio.h"
main()
{
    int a[3][4],r,i,j;
    int *p[3];
    int **q;
   
    for(i=0;i<3;i++)
        p[i]=a[i];  //指针数组p的每个单元格都指向二维数组的每一行的第一个单元格
    q=p[0];       //q指向p数组首元素
   
    for(i=0;i<3;i++)     //通过指针数组输入二维数组单元格的内容
        for(j=0;j<4;j++)
            scanf("%d",p[i][j]);
          //利用指针的指针q求二维数组的和
    r=0;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++) 
        r=r+ *(p[0]+i*3+j);
    printf("%d\n",r);
}

填空如下,供参考:

#include <stdio.h>
int main()
{
    int a[3][4], r, i, j;
    int* p[3];
    int** q;

    for (i = 0; i < 3; i++)
        p[i] = a[i]; //@#1 //指针数组p的每个单元格都指向二维数组的每一行的第一个单元格
    q = p;  //@#2          //q指向p数组首元素

        for (i = 0; i < 3; i++)     //通过指针数组输入二维数组单元格的内容
            for (j = 0; j < 4; j++)
                scanf("%d", p[i]+j); // @#3
    //利用指针的指针q求二维数组的和
    r = 0;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 4; j++)
            r = r + *(q[i] + j); //@#4
    printf("%d\n", r);
}

以下回答引用自chatGpt, 有用的话,请采纳哇!!!
使用指针数组实现对二维数组的求和,可以通过将指向每个一维数组的指针存储到一个指针数组中,再使用指针数组进行遍历和求和操作。具体的思路如下:

  1. 定义一个指针数组,其中每个元素指向一个一维数组;
  2. 使用循环遍历指针数组,依次对每个一维数组进行求和操作;
  3. 将所有一维数组的和累加起来,得到最终的二维数组的和。

下面是示例代码:

#include <stdio.h>

#define ROW 3
#define COL 4

int main() {
  int arr[ROW][COL] = {{1, 2, 3, 4},
                       {5, 6, 7, 8},
                       {9, 10, 11, 12}};

  int *ptr[ROW];
  int i, j, sum = 0;

  for (i = 0; i < ROW; i++) {
    ptr[i] = arr[i];
  }

  for (i = 0; i < ROW; i++) {
    for (j = 0; j < COL; j++) {
      sum += *(ptr[i] + j);
    }
  }

  printf("The sum of the array is: %d\n", sum);

  return 0;
}

在这个示例代码中,我们定义了一个 3 行 4 列的二维数组 arr,并将每个一维数组的指针存储到指针数组 ptr 中。接着,使用双重循环遍历指针数组 ptr 和一维数组,累加每个元素的值,得到最终的二维数组的和。最后,使用 printf 函数输出结果。