我正在尝试声明一个可用于多个 .c 文件的变量。它是指向结构的指针的分配数组。
据我了解,我必须在头文件中用 extern 声明它,但由于我不能在头文件中 malloc 声明它,我是否在头文件中声明它,然后在 .c 文件中声明它?我看不出这是怎么做到的。
我正在尝试声明一个可用于多个 .c 文件的变量。它是指向结构的指针的分配数组。
据我了解,我必须在头文件中用 extern 声明它,但由于我不能在头文件中 malloc 声明它,我是否在头文件中声明它,然后在 .c 文件中声明它?我看不出这是怎么做到的。
您将声明放在标题中,将定义放在 .c 文件中,并malloc
在第一次取消引用指针之前执行的函数中调用(例如main
函数)。所以它看起来像这样:
富.h:
extern struct your_struct** pointer;
void foo_init();
void foo_cleanup();
富.c:
#include <stdlib.h>
#include "foo.h"
struct your_struct** pointer;
void foo_init() {
pointer = malloc(sizeof(your_struct*) * some_size);
// initialize the pointer in the array
}
void foo_cleanup() {
// free the pointers in the array if you used malloc to initialize them
free(pointer);
}
主.c:
#include "foo.h"
int main() {
foo_init();
// do other stuff
foo_cleanup();
return 0;
}
由于要使用动态变量,因此必须使用指针。除了声明之外,您还需要在某处定义它。在您的情况下,您还应该尽早在代码中分配内存,即在 main 的第一行。
是的,您在标头中声明它,并malloc
在 .c 文件中声明它。Malloced 指针本身没有作用域,只有在它们为free
d 时才被释放。因此,您可以在整个程序中使用指针。
extern
在头文件中声明.c
在您的文件之一中将其定义为全局.c
文件中分配指向的数组你可以走了。
但是请注意,如果您在不同的文件中访问它,您需要确保在每次访问时数据已经被分配(并且尚未释放)。
在头文件中声明指针。在所有引用指针的 .c 模块中包含标头。
extern struct yourstruct *ps;
然后在最相关的.c模块中定义变量
struct yourstruct *ps;
ps = malloc(....
FILE **file_array=NULL;
function(){
file_array = malloc(size*sizeof(FILE*));
}
您需要在 c 文件中对其进行 malloc 并在头文件中声明它。您还需要注意它的访问和释放。它必须被释放并且只有一次。可能在程序执行结束时。您还需要在多个文件中访问它之前设置保护条件(检查是否为空)。