如何在C语言中使用指针在2d3d数组中移动?

问题描述 投票:0回答:1

今天,我在学习中编了一点代码。而我对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个英数,就像这样。

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上看到一个教程,如何正确地做这个,但不知何故,我误解了这个主题。谁能告诉我如何使用指针来实现这个功能,好吗?

谢谢你的时间

c arrays pointers multidimensional-array 2d
1个回答
4
投票

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

 printf("%d ",*((a+i*5)+j));
© www.soinside.com 2019 - 2024. All rights reserved.