Ошибка определения и инициализации многомерного массива - PullRequest
1 голос
/ 11 октября 2010

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 11 октября 2010

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

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

5 голосов
/ 12 октября 2010

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

*( arr + i * COLS + j )

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

int arr [][ COLS ];

Но пропустить второе измерение недопустимо.

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

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

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

Примеры:

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
0 голосов
/ 11 октября 2010

int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };<br> char str[2][4] = { "abc", "fgh" };
при первом объявлении массив 2d int имеет 2 строки по 3 строки.
второй создаст 2d массив символов с 2 строками и 4 столбцами. 4-й элемент в каждой строке массива char это NULL char

0 голосов
/ 11 октября 2010

Попробуйте

include <string>

и

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