如果可以的话,我会通过初始化主函数中的结构副本并将其传递给其他函数来解决此问题,但不允许我更改此项目的函数 header 。
既然我得到了这个,我也确信有一个同样好的解决方案可以帮助我了解如何使用动态内存分配来使函数的 Action 独立于函数的范围而持续功能。
我的结构:
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 ) {
}
并且与结构初始化相同的 .c 文件中的其他函数也不获取数据结构或返回它,但它们可以访问它并对其进行操作。就好像该结构应该能够像全局变量一样对待。
如何实现?
最佳答案
要声明全局变量,请将声明放在所有函数之外。
struct AmNet gNet;
void create_net() {
gNet.front = NULL;
...
}
Global variables像 gNet
被广泛认为是不好的做法。如果您不能更改原型(prototype),我看不到其他方法,但是 static
声明至少会将其保留在文件范围内。
/* in AmNet.c */
static struct AmNet *gNet;
void create_net() {
gNet = (struct AmNet *)malloc(sizeof(struct AmNet));
gNet->front = NULL;
...
}
关于c - 如何在不返回或传入的情况下访问在一个函数、另一个函数中创建的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26822238/