我正在尝试创建一个全局数组,其大小由运行时的外部参数文件决定。
我看过其他关于此的问题并尝试过:
int const Nt=1280;
double *Array = NULL;
Array = malloc(Nt * Nt * sizeof(double));
但是,我收到如下错误:
错误:数组类型冲突
错误:初始化元素不是常量
如何创建这样一个全局数组,而无需在每次需要更改其大小时都重新编译?
最佳答案
在全局范围内不允许赋值。您必须改为在函数中执行此操作。
int const Nt = 1280;
double *Array = NULL;
假设以上 2 个语句在全局范围内。它们是初始化的例子,因为语句在声明本身赋值。这在全局范围内是允许的,初始化器可以是常量值、字符串文字或此时可访问的其他变量。
const int Nt ; // Just declaration
Nt = 1280 ; // Error. Assignment is not allowed at global scope.
const char* myName = "CHP" ;
int a[] = { 11,22,33,44,55 } ;
同样,在您的示例中,Array
只是一个声明。在函数中进行赋值。
void assignArray() {
Array = malloc(Nt * Nt * sizeof(double));
// ...
printf("%d", sizeof(Array)/sizeof(Array[0]); // Size which is nothing but Nt*Nt
// 0 to (Nt * Nt) - 1
}
关于段错误,发布更多代码。
关于c - C 中的全局变量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294974/