如何访问在一个函数中创建的数据结构,在另一个函数中,而不返回或传入它?

时间:2014-11-08 21:21:42

标签: c pointers data-structures scope

如果可以,我只是通过在main函数中初始化结构的副本并将其传递给另一个函数来解决这个问题,但我不允许更改此项目的函数头。

由于我已经开始使用它,我也确信有一个同样好的解决方案可以帮助我学习一些关于如何使用动态内存分配来使函数的操作独立于其范围的内容。功能

我的结构:

typedef struct AmNet { // this struct can be changed as needed
   int size;
   User ** users; // group of users in the net
   User *front; // the first user
   User *back; // the last user
} *AmNet;

要创建的功能是:

void create_net(){ // this line cannot be changed
}

在另一个文件的main函数中,只需调用:

create_net();

然后,例如 - 此函数应该能够访问结构,创建新用户,并将其添加到同一结构的用户列表中。

void addUser( const char *name ) {
}

与struct初始化相同的.c文件中的其他函数也不接受数据结构或返回它,但是它们可以访问它并对其进行操作。就好像结构应该像全局变量一样对待。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

要声明全局变量,请将声明放在所有函数之外。

struct AmNet gNet;

void create_net() {
   gNet.front = NULL;
   ...
}
gNet这样的{p> Global variables被广泛认为是不好的做法。如果你不能改变原型,我就看不到别的办法,但是static声明至少会将它保存在文件范围内。

/* in AmNet.c */
static struct AmNet *gNet;

void create_net() {
  gNet = (struct AmNet *)malloc(sizeof(struct AmNet));
  gNet->front = NULL;
 ...
}