不声明二维数组时的错误

时间:2015-07-01 18:20:40

标签: c arrays

我在C中有点新,我正在尝试编写一些简单的代码,为少数学生获得一些成绩并将它们存储在二维数组中。问题是它不会运行,因为没有声明数组。为什么我需要在使用之前声明一些东西,如何在不运行整个循环并声明某些值的情况下简单地声明它?

这是我现在的代码:

#include <stdio.h>

int main()
{
    int students = 2, courses = 2;
    int grades[students][courses];
    for(int i=0; i<students; i++)
    {
        for(int j=0; j<courses; j++)
        {
            printf("Student %d, course %d grade: ", i, j);
            scanf("%d", &grades[i][j]);
        }
    }
}

4 个答案:

答案 0 :(得分:4)

  

为什么我需要在使用之前声明一些东西

因为这就是C语言的定义方式。您必须在使用它们之前声明事物,期间。在使用“它”之前,你必须告诉编译器“它”是什么。在这方面,有时候C可以相当宽容,愿意只通过“部分”声明。但无论如何,至少需要某种部分声明。

你的(已注释掉的)声明是正确的

int grades[students][courses];

请注意,为了使用非常量studentscourses作为数组大小,您需要一个现代C编译器(C99或更高版本),它支持可变长度数组(VLA)。 “Classic”C(C89 / 90)不允许非常数阵列。

然后你必须为数组元素分配一些有意义的值。这必须使用循环来完成。

答案 1 :(得分:2)

我不确定你提出的第二个问题是什么,但看起来你的二维阵列声明正确。 int grades[students][courses];应该为您提供一个固定大小的整数二维数组。您需要声明值以告诉编译器您实际指的是什么。

答案 2 :(得分:1)

声明允许计算机保留存储空间,以便将要保存的值放在数组中。如果您没有声明,则没有保留这些值的地方。

就像说“我想写下一些东西,为什么我要先拿一张纸?”

答案 3 :(得分:0)

声明要放置的数组

int grades[2][2];

作为你主要的第一行。 如果您想要包含更多学生或成绩,可以将大小设置为更大的大小。