c - 如何在不返回或传入的情况下访问在一个函数、另一个函数中创建的数据结构?

标签 c pointers data-structures scope

如果可以的话,我会通过初始化主函数中的结构副本并将其传递给其他函数来解决此问题,但不允许我更改此项目的函数 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 variablesgNet 被广泛认为是不好的做法。如果您不能更改原型(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/

相关文章:

java - 打印二叉树中没有兄弟节点的所有节点?

algorithm - 有竞争力的编程 - 用 P、Q 和 R 配料准备完美的 curry

c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?

c - 针对特定结构的 Eclipse CDT c 项目设置

c - 我被这段代码困住了,对 FILE 结构和 fopen 函数有疑问

c++ - 分配和删除指针

c - 大小 8 的无效读取,大小 8 的无效写入,C

c - 数组到指针与二维数组

c - 从指向结构中不同变量的指针访问结构的第一个变量

algorithm - 使用 B-Tree 代替 Trie