c - 如何使指向全局结构数组的指针

标签 c arrays pointers memory-management

我有这段代码:

#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;
}

我得到错误: error C2099: 初始值设定项不是常量

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

最佳答案

首先,初始化程序 不是常量。您需要从函数内部初始化全局变量——例如主要:

VERTEX *arr;

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

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

关于c - 如何使指向全局结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773015/

相关文章:

c - 是否可以在程序的多个文件中使用 OpenMP 指令?

mysql - 如何让 mysql 在没有匹配的行时在更新时抛出错误?

java - 在 for 循环中交换整数数组值 - 这可能吗?

Javascript,将数组的第一个元素连接到另一个数组的第一个元素

c - C 中的 MISRA 递增

c - 当 x 是 NaN 或 inf 时,为什么 floor, ceil 实现返回 x + x?

c - c 程序中的双重释放或损坏 (!prev) 错误

ios - 生成一个不重复随机数的 Swift 数组

c - 在 C 中将字符串分成两半的问题

c++ - 检查指针是否指向标准 C/C++ 中的数组内部