C数组错误:表达式必须具有常数值



我试图将两个变量的值传递给students_grades_db数组的维度,但它不起作用,我也不知道为什么,因为这两个变量都是常量变量

const int number_students = 4;

const int number_of_notes = 4;

float students_grades_db[number_students][number_of_notes] = {0};

它不起作用:(

全局数组声明必须具有用于索引大小的常量表达式。对变量(甚至是const变量(的引用不是常量表达式,因此不能使用。

相反,您可以使用扩展为常量文字的预处理器宏:

#define number_of_students  4
#define number_of_notes     4

如果在文件范围的函数外声明一个数组,则它将获得静态存储持续时间。所有具有静态存储持续时间的变量都必须具有作为初始值设定项的编译时间常数,如果它们是数组,则数组大小也必须是编译时间常数。

这意味着大小必须类似于整数常数123或仅包含整数常数的表达式。

const关键字不直观地不会使某些内容成为编译时常数,它只会使某些内容只读。C和C++在这里是不同的,您的代码将在C++中工作。

可能的解决方案:

  • 在函数内移动students_grades_db。然后,您可以使用任何类型的表达式来声明数组大小,包括常见的int变量。您可能不应该将该数组声明为";全局";无论如何
  • 或者将常数换成#define number_students 4

最新更新