如何使用 C 中的指针在 2d/3d 数组中移动?

How to move in the 2d/3d array using pointers in C?

今天我为学习编写了一些代码。我对 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");
 }

但是没有用。当我向数组中输入以 1 开头的前 25 个 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 上看到了如何正确执行此操作的教程,但不知何故我误解了这个主题。有人可以告诉我如何使用指针执行此操作吗?

感谢您的宝贵时间!

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

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