首页 > 解决方案 > 如何使用 C 中的指针在 2d/3d 数组中移动?

问题描述

今天我为我的学习编写了一点代码。我对 2d(以及 C 中的 3d 数组)有疑问。例如,当我为数组分配内存或制作静态数组时:

//dynamic
int *a=(int *)malloc(5*5*sizeof(int));
     //OR 
//static
int ar[5][5] = {0};
int *a= ar[0][0];

我不知道如何使用指针在这个矩阵中正确移动。我尝试了一个看起来像这样的 for 循环来打印它的元素:

for(int i=0;i<5;i++){
   for(int j=0;j<5;j++){
     printf("%d ",*((a+i)+j));
   }
   puts("\n");
 }

但它不起作用。当我输入数组前 25 个以 1 开头的 int 数字时,如下所示:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

我得到了 printf 输出,例如:

1 6 11 16 21
6 11 16 21 22
11 16 21 22 23
16 21 22 23 24
21 22 23 24 25

输出仅包括第一列和最后一行。

我在 youtube 上看到了如何正确执行此操作的教程,但不知何故我误解了这个话题。有人可以告诉我如何使用指针来做到这一点吗?

谢谢你的时间!

标签: carrayspointersmultidimensional-array2d

解决方案


您需要将行索引乘以行长度才能到达该行。

 printf("%d ",*((a+i*5)+j));

推荐阅读