#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;
}
Ошибка компилятора пытается сообщить вам, что, поскольку вы не можете инициализировать массив с переменным размером, вам нужно указать обе границы массива, а затем заполнить массив после его объявления.