Ошибка определения и инициализации многомерного массива

Я получаю ошибку в компиляции со следующим определением.

int  matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };

char str[ ][ ] = { "abc", "fgh" };

Почему компилятор жалуется на отсутствующий индекс и слишком много инициализаторов.

Ответы

Ответ 1

Когда вы объявляете многомерный массив, вы должны явно определить размер всех, кроме последнего измерения. В противном случае компилятор не будет знать, как найти заданное значение в массиве.

edit: прочитайте мое сообщение здесь

Ответ 2

Если массив определен как int arr[ ROWS ][ COLS ];, тогда любая нотация массива arr[ i ][ j ] может быть переведена на нотацию указателя как

*( arr + i * COLS + j )

Обратите внимание, что выражение требует только COLS, оно не требует ROWS. Итак, массив определение можно записать эквивалентно как

int arr [][ COLS ];

Но отсутствие второго измерения неприемлемо.

Дальнейшее понимание может быть достигнуто с помощью трех приведенных ниже примеров. Во всех трех примерах одна и та же запись массива arr[ 2 ][ 3 ] переводится в указатель обозначение.

  • Между A и B, ROWS одинаково, но COLS отличается; result = обозначение указателя отличается.

  • Между A и C, ROWS отличается, но COLS одинаково; result = обозначение указателя такое же.

Примеры:

A. int arr[ 4 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17
B. int arr[ 4 ][ 5 ];      arr[2][3] = arr + 2 * 5 + 3 = arr + 13
C. int arr[ 6 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17

Ответ 3

Try

include <string>

и

string str[] = { "abc", "fgh" };

Ответ 4

int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };
char str[2][4] = { "abc", "fgh" };

первая декларация сделает 2d int array имеющей 2 строки с 3 col.
второй будет делать массив 2d char с двумя строками и 4 столбцами. 4-й элемент в каждой строке массива char - это NULL char