如何访问在一个函数中创建的数据结构,在另一个函数中,而不返回或传入它?
如果可以,我只是通过在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;
要创建的function是:
void create_net(){ // this line cannot be changed }
在另一个文件的main函数中,简单地用:
create_net();
然后,例如 – 此函数应该能够访问结构,创建新用户,并将其添加到同一结构的用户列表中。
void addUser( const char *name ) { }
与struct初始化相同的.c文件中的其他函数也不接受数据结构或返回它,但是它们可以访问它并对其进行操作。 就好像结构应该像全局变量一样对待。
如何实现这一目标?
要声明全局变量,请将声明放在所有函数之外。
struct AmNet gNet; void create_net() { gNet.front = NULL; ... }
像gNet
这样的全局变量被广泛认为是不好的做法。 如果你不能改变原型,我无法看到其他方法,但static
声明至少会将其保留在文件范围内。
/* in AmNet.c */ static struct AmNet *gNet; void create_net() { gNet = (struct AmNet *)malloc(sizeof(struct AmNet)); gNet->front = NULL; ... }