Изучаю С(не С++ пока) по Шильдту, дошел до указателей, далее пошли массивы. С одномерными массивами вроде все понятно, различия в синтаксисе тоже. Но как пошли двумерные массивы, то начались трудности. У меня вопрос: Как передать двумерный массив функции? Вот например для одномерного есть три способа с точки зрения синтаксиса: как массив определенного или неопределенного размера или через указатель, ведь имя массива есть адрес его 1 элемента. Двумерный массив расположен непрерывно в памяти. Его можно представить как матрицу. Мне важно понять этот момент, ибо дальше вряд ли что-то получится. Я вообще хотел заняться веб-программированием, но мозги тоже надо развивать, и С как раз подходит для этого. Вот есть фрагмент моей программы. Выдается ошибка(см. ниже). Объясните мне, пожалуйста, в чем моя ошибка. дайте, пожалуйста ссылку, где разжевывается про двумерные массивы и как их передавать в функцию через указатели. Я изучаю С. Говорите, пожалуйста, в рамках С, а не С++. Просто я думал, что array[m] = &array[m][0] и решил действовать по аналогии с одномерными массивами, но компилятор ругается на меня.
#include <stdio.h>
void screen (int **matrix, int size1, int size2);
int main()
{
int m, n, i1, j1;
scanf("%d %d", &m, &n);
int array[m][n];
for (i1 = 0; i1 < m; i1++)
{
for(j1 = 0; j1 < n; j1++)
{
array[i1][j1] = i1 + j1;
printf("%3d", array[i1][j1]);
}
}
screen(array[m], m, n);
printf("\n");
return 0;
}
void screen(int **matrix, int size1, int size2)
{
int i, j;
for (i = 0; i < size1; i++)
{
for(j = 0; j < size2; j++)
{
matrix[i][j] = i + j;
printf("%3d", matrix[i][j]);
}
}
}
[Error] cannot convert 'int*' to 'int**' for argument '1' to 'void screen(int**, int, int)'
screen((int *)array, m, n)или так:screen(array[0], m, n). – user181245 Nov 22 '18 at 02:27matrix[i]могла работать. – user181245 Nov 22 '18 at 02:40