Массив - это серия объектов, последовательно расположенных в памяти.
int blah[5][10];
- это массив из 5 [массив из 10 [int] s].
Например, blah[0]
даст вам первый массив из 10 дюймов, blah[1]
даст вам второй и т. Д.
Чтобы иметь возможность вычислить смещения памяти, C должен точно знать, сколько элементов содержится в каждом «подмассиве».
Так что вы могли бы сделать это
void foo(int anArray[][10]) {
cout << anArray[2][2] << endl;
}
или это
void foo(int anArray[5][10]) {
cout << anArray[2][2] << endl;
}
но вы не можете сделать [][]
.
Это совсем отличается от
void foo(int *anArray[10]) { //array of 10 pointers
или
void foo(int **anArray) { //pointer to pointer (could be a pointer to an array of pointers to more arrays)
Если вы не знаете размеров массива заранее, вам придется использовать более сложную структуру данных. Может быть, передать ширину / высоту массива функции (или использовать структуру, содержащую эту информацию) и разрешить 2 измерения в одномерный массив, например, так:
int *arr = malloc(width*height * sizeof(int));
...
cout << arr[x + y * width] << endl;