【问题标题】:how to make a pointer to array of structs global如何使指向结构数组的指针成为全局的
【发布时间】:2012-05-27 09:43:06
【问题描述】:

我有这个代码:

#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


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是如果我有一个添加 vertex 的函数,我怎么能在不将它作为参数传递的情况下到达这个 arr
    • @user1386966 你不能,你把它作为参数传递。这是正确的做法。
    • 问题出在我的函数是:void add_vertex(char * name) -homework stuff,所以我不能传递另一个参数
    • @user1386966 啊。糟透了。在这种情况下,请采用我在回答中写的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 2017-06-03
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多