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