0

我有这个代码:

#define N 100  //starting size of the array

int is_full(VERTEX *arr);
int add_vertex(char *name);
int print_degree(int ID);
int _get_vertex(int ID);
VERTEX *resize_array(VERTEX *vertex_array,int new_size);

VERTEX *arr = (VERTEX*)calloc(N, sizeof(VERTEX)); // dynamic allocation and initialization to NULL\0

int main(void)
{
    int vertex_counter = 0 ;
    int starting_size_of_array = sizeof(VERTEX)*N;
}

我收到错误:错误 C2099:初始化程序不是常量

我希望 VERTEX 数组是全局的,以便我可以在任何地方访问这个数组。那么为什么它不是恒定的呢?N 在 #define 下,VERTEX 在 .h 文件中有它的声明。

4

2 回答 2

3

首先,初始化器不是常数。您需要从函数中初始化全局 - 例如main

VERTEX *arr;

int main(void)
{
    arr = calloc(N, sizeof *arr);
}

但是,如果可以避免(通常是这样),您首先不应该使用全局变量。它会破坏您的代码设计。

于 2012-05-27T09:47:57.857 回答
0

calloc() 将返回的值不是恒定的。您可以将 arr 初始化为 NULL,然后在程序启动期间对其进行初始化。

于 2012-05-27T09:47:26.443 回答