如何创建指向全局结构数组的指针

问题描述 投票:0回答:2

我有此代码:

#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文件中有它的声明。

c arrays pointers memory-management
2个回答
3
投票

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

VERTEX *arr;

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.