В 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

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

4 ответа

Решение
(8,9,7,67,11)

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

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

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

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

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

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

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

Потому что вы используете не скобки, а скобки. Ты хочешь:

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

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

Это концепция 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

Другие вопросы по тегам