Почему я получаю сообщение об ошибке «размер отсутствует в «оценках». Когда строка, по-видимому, не требуется объявлять?

#arrays #c #row

#массивы #c #строка

Вопрос:

Просмотр руководства по двумерным массивам. В руководстве говорится, что нет необходимости определять строку в двумерном массиве. Их код работает нормально и возвращает «89», как и ожидалось. Мой жалуется на отсутствие размера для оценок [] [столбцов]

Есть идеи?

 
int main () 
{

    int const columns = 3;
    int grades[][columns] = {
        {12, 23, 45},
        {64, 78, 89}
    };

    printf("%d", grades[1][2]);
  return 0;
}```




Output: error: array size missing in 'grades'
    8 |     int grades[][columns] = {

 

Комментарии:

1. В этом руководстве вы используете C или C? Это вполне допустимый C , но не C.

2. Это сбивает с толку. Учебное пособие предназначено специально для C и отлично работает для парня, пишущего программу?

3. @WhozCraig Это не поддержка VLA, VLA не могут быть инициализированы ни в одной версии стандарта C.

4. На некоторых платформах довольно часто компилируется код на C с помощью компилятора C , вы уверены, что это не то, что здесь происходит?

Ответ №1:

Ваша ошибка компилятора не связана с пустыми скобками, columns это проблема. Вы не можете инициализировать массив, размер которого определяется переменной (они называются массивами переменной длины или VLA для краткости).

Это будет работать нормально, например:

 #define COLUMNS 3

int main () 
{
    int grades[][COLUMNS] = {
        {12, 23, 45},
        {64, 78, 89}
    };

    printf("%d", grades[1][2]);
  return 0;
}
 

Ошибка компилятора пытается сообщить вам, что, поскольку вы не можете инициализировать массив с переменным размером, вам нужно указать обе границы массива, а затем заполнить массив после его объявления.