Как перемещаться в массиве 2d / 3d с помощью указателей в C? - PullRequest
0 голосов
/ 28 мая 2020

Сегодня я немного писал код для учебы. И у меня проблема с 2d (а также с 3д массивами в C). Когда я выделяю память для массива или создаю массив c, например:

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

Я не знаю , как правильно перемещаться в этой матрице с помощью указателей . Я попробовал для l oop напечатать его элементы следующим образом:

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

Но это не работает. Когда я ввел в массив первые 25 чисел int, начиная с 1, например:

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. Может кто-нибудь показать мне, как это сделать с помощью указателей, пожалуйста?

Спасибо за ваше время!

1 Ответ

4 голосов
/ 28 мая 2020

Вам нужно умножить индекс строки на длину строки, чтобы добраться до этой строки.

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