Хотя одномерный массив очень похож на указатель на элемент массива, многомерный массив не является указателем на указатель ... или массивом указателей. В памяти он организован как одномерный массив, единственное отличие состоит в том, что компилятор знает, как вычислить адрес из более чем одного индекса.
Ваш массив организован в памяти, как это
a000 a001 a002 a010 a011 a012 a020 a021 a022 a100 a101 a101 ...
, где a[0][0][0]
и т. Д. Записано как a000
и т. Д. Для экономии места. Вы можете сделать
newMate(args[1])
если вы определите newMate
, чтобы взять двумерный массив
struct MateMessage newMate(char cr[3][3]) {
int i,j;
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
doSomethingWith(cr[i][j]);
}
}
return something;
}
В этом случае функция, вызывающая абонента, передаст адрес a[1][0][0]
на newMate
, а newMate
узнает, как обратиться к оставшимся двум измерениям.