在 C 中将 extern 与多维数组一起使用

Using extern with multidimentional arrays in C

我有一堆多维数组分配在不同源文件的局部函数中,但我想使它们成为全局的。我正在考虑使用 extern,根据 this question,我需要制作一个头文件,其中包含变量的 声明 ,然后是 在一个源文件中只定义那个变量一次。

但是,我用来生成多维数组的方法是在一行中声明和定义变量,如下所示:

float (*data0)[224][3] = calloc(224, sizeof *data0);

有没有一种方法可以将其拆分为声明和定义以便我可以使用此方法,还是在头文件本身中同时执行这两种方法会更好?


我正在用 C 实现一个神经网络,我在多个地方定义了很多这样的数组。起初我不认为我以后会需要它们,这应该是 运行 在具有内存限制的嵌入式系统中,所以我将这些数组全部放在本地并在它们上使用 free尽快。

但事实证明我需要它们来训练这个网络,所以我需要它们是全局的,以便它们在函数的多次迭代中保存它们的值。另外,我不知道我们将使用的系统会附加一个 64MB DRAM,所以内存限制不是什么大问题。

如果您在全局定义这些数组,则无需动态分配内存。与堆栈 space 不同,全局变量的大小没有实际限制。

因此假设您想要一个维度为 224、224 和 3 的 3D 数组,请按如下方式定义它:

float data0[224][224][3];

然后在头文件中声明为:

extern float data0[224][224][3];

此外,默认情况下全局变量是零初始化的,因此不需要显式初始化程序。