В C, что именно происходит, если я использую() для инициализации массива с двойной размерностью вместо {}?

Когда я инициализирую массив a[][]:

int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

а затем отобразить элементы массива.

Почему я получаю:

11 89 0 0 0 
0 0 0 0 0

Что произойдет, если вы используете фигурные скобки вместо первых скобок здесь?

Ответ 1

(8,9,7,67,11)

- выражение, использующее оператор запятой, который оценивается равным 11. То же самое верно для другого инициализатора. Таким образом, вы только инициализируете первые два элемента явно, тогда все остальные инициализируются на 0. Ваш компилятор должен предупредить об отсутствии уровня фигурных скобок в инициализаторе.

Если вы используете фигурные скобки, вы инициализируете два составных массива a, как это возможно.

Ответ 2

 int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

эквивалентно (в области блока):

 int a[2][5]={11, 89};

, является оператором запятой C. Он оценивает свои операнды слева направо и дает значение правильного операнда.

Инициализаторы массива массива файлов должны быть постоянными, а выражение , никогда не является постоянным выражением, объявление массива недействительно.

Ответ 3

Потому что вы не используете фигурные скобки, но скобки. Вы хотите:

int a[2][5] = { { 8,9,7,67,11 }, { 7,8,9,199,89 } };
//              ^^^          ^^^^^^            ^^^

В исходном коде вы только что познакомились с запятой, и на самом деле вы написали int a[2][5] = { 11, 89 };. Это законно, но он инициализирует все недостающие элементы равными нулю.

Ответ 4

Это понятие comma operator и comma separator Вы должны использовать {} для инициализации массива

int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

здесь (8,9,7,67,11) эквивалентно 11 из-за comma operator и (7,8,9,199,89) эквивалентно 89 для того же, потому что оператор-запятая оценивается как left to right, а самым правым значением является возвращаемое значение

следовательно, это эквивалентно a[2][5]={11,89}

но (8,9,7,67,11),(7,8,9,199,89), но запятая, используемая в () , (), равна comma separator