Для будущих читателей этого вопроса ответ Эрика Постпишила верен, и я принял его, потому что так оно и есть.Вот пример программы и выходных данных, демонстрирующих размер оператора / функции применительно к многомерным массивам.В общем, если объявлено как массив целых чисел
int mda[x][y][z];
then mda[a][b][c] == *(mda + ((a *( y* z)) + (b*z) + (c))
Что важно, по крайней мере, до первоначального вопроса, который я задал, так это то, что индексирование в массив с меньшим количеством "измерений", чем было объявлено в вашей программе, все равно будет компилироватьсяи поддержите "sizeof" для следующего массива.
mda[a] == *(mda + (a * (y*z))) AND sizeof(mda[a]) == sizeof(array_type) * y * z
mda[a][b] == *(mda + (a * (y*z)) + (b * z)) AND sizeof(mda[a][b]) == sizeof(array_type) * z
Хорошо, вот пример программы, которую можно запустить в онлайн-среде IDE, и проверьте:
#include <stdio.h>
#define X (4)
#define Y (10)
#define Z (5)
int multi_dimension_array[X][Y][Z];
void print_array(){
for(int i=0; i<X; i++){
printf("THIS IS THE %dth value of X\n", i);
for(int j=0; j<Y; j++){
for(int k=0; k<Z; k++){
printf("%d ", multi_dimension_array[i][j][k]);
}
printf("\n");
}
}
}
int main(void) {
printf("%d %d %d %d\n", sizeof(multi_dimension_array[0][0][0]), sizeof(multi_dimension_array[0][0]), sizeof(multi_dimension_array[0]), sizeof(multi_dimension_array));
memset(multi_dimension_array,0x01,sizeof(multi_dimension_array));
print_array();
memset(&multi_dimension_array[2],0x0,sizeof(multi_dimension_array[2]));
printf("\n\n\nNEXT MEMSET with the X=2 zeroed out\n\n\n");
print_array();
return 0;
}
И вот эти программывывод:
4 20 200 800
THIS IS THE 0th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
THIS IS THE 1th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
THIS IS THE 2th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
THIS IS THE 3th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
NEXT MEMSET with the X=2 zeroed out
THIS IS THE 0th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
THIS IS THE 1th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
THIS IS THE 2th value of X
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
THIS IS THE 3th value of X
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
16843009 16843009 16843009 16843009 16843009
* Обратите внимание, что memset устанавливает для каждого байта значение второго параметра, которое в данном случае было 0x01, что составляет 4 байта 0x01010101 == 16843009.