今天,我在学习中编了一点代码。而我对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上看到一个教程,如何正确地做这个,但不知何故,我误解了这个主题。谁能告诉我如何使用指针来实现这个功能,好吗?
谢谢你的时间
你需要将行的索引乘以行的长度才能到达该行。
printf("%d ",*((a+i*5)+j));