Я пытаюсь передать двумерный массив функции. У меня нет проблем с передачей функции. Но мне трудно понять логику этого. Функции и основные определения выглядит следующим образом:Инициализация массива с переменными
// Function to print the two-dimensional array
void print(int x, int y, int a[x][y]){
printf("\n");
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
// Function to initialize the two-dimensional array
void init_2d(int *a, int x, int y){
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++){
a[i*y + j] = i + j;
}
printf("\n");
}
}
int main(){
int m = 2, n = 3;
int a[m][n]; // a two dimensional whose size has been defined using m and n
init_2d(a, m, n);
print(m, n, a);
}
Как ни странно, все работает нормально. И это моя проблема, поскольку я не могу переварить ее логику.
Основными проблемами являются:
- То, что я читал в книгах, что размер двумерных массивов должны быть определены с использованием констант или символьных констант. В моем основном я определяю 2-D массив, используя переменные
m
иn
, и все же он отлично работает. Зачем? - Мне также сказали передать двумерный массив, разложив его в одномерный массив (определяя его как указатель на функцию int), то есть способ, которым я это сделал в функции
init_2d
. Но в функцииprint
я делаю это с использованием двухмерного массива, размер которого был определен с использованием переменныхx
иy
. Это нормально? - Можно ли пропустить двумерный массив с помощью указателя на указатель?
Может ли кто-нибудь предложить мне хорошее чтение по этой теме, которое может очистить все мои понятия?
Я использую CodeBlocks скомпилировать мой код и компилятор является GNU GCC компилятор.
2 странно - я удивлен, что он скомпилирован! – John3136
@ John3136 C99 поддерживает форвардные декларации параметров. –
@Armin: Что такое «декларация параметров форварда» и как это соотносится с комментарием John3136? – AnT