Я столкнулся с некоторыми проблемами при передаче 2d-массива в функции сегодня, позже я нашел некоторые решения, такие как A и B.
Я знал, что 2d-массив хранится в непрерывной памяти как 1d. Так что, на мой взгляд, на самом деле нет двухмерных точек, компилятор разделил эти непрерывные числа и создал «двумерную» концепцию.
У меня такой вопрос: в C после того, как я явно сказал компилятору, параметр является int **, почему он не прошел 2-мерную точку?
Кто-то может указать, что "в C вы не указали компилятору длину группы", я думаю, что он знал эту информацию, потому что если вы попытаетесь повторно объяснить простую память из 12 элементов в arr [2] [6], это будет ошибка типа "void printArr (int _arr [] [6], int _columns, int _rows)".
Немного смущен, пожалуйста, помогите ...
int arr[][3]={{1,2,3},{5,6,7},{9,10,11},{13,14,15}};
void printArr(int _arr[][3], int _columns, int _rows){ //----->A
void printArr(int (* _arr)[3], int _columns, int _rows){//---->B
void printArr(int** _arr, int _columns, int _rows){//--------->C
for(int r=0; r< _rows; r++){
for (int c=0; c<_columns; c++)
//printf("%4d,", _arr[r][c]);
printf("%4d,", *(*(_arr+r)+c));
}
}
int main(){
printArr(arr, columns, rows);
}