因此,我尝试全局声明一个 3 维整数数组,以便它可以由两个单独的函数使用。
最初,我尝试过这个(solns
是 3D 数组的名称):
static int*** solns;
但是,虽然三重指针 solns
确实在函数之间持续存在,但我放置在其中的信息却不会。当第二个函数尝试访问第一个函数放置在 solns
中的数据时,这会给我带来段错误。
我应该如何声明才能保留其中的信息?我试过了
static int solns[][][];
除此之外,但 gcc 不喜欢我尝试的其他任何东西。
编辑:函数 1 中的这段代码将数据放入数组中:
solns[k] = realloc(solns[k],sizeof(solns[k])/sizeof(int*)+sizeof(int*));
solns[k][l] = realloc(solns[k][l],sizeof(int)*4*sC);
for(i=0;i<sC*4;i++)
{
solns[k][l][i] = row[i];
}
l++;
此片段是函数 2 尝试读取该数据的位置:
if(solns[i][j][m*4+1]!=solns[i+1][n][m*4+2])
break;
但是 solns[i]
此时是一个空指针,因为 solns
指向的数据不会继续存在。
最佳答案
当您在全局范围内使用术语“静态”时,这意味着该对象/变量的实例对于每个编译单元来说都是本地的。
这意味着每个 .cpp
文件将具有上述变量的不同版本。因此,如果您的函数位于两个不同的文件中,它将无法工作。
要解决此问题,请在 .cpp
文件中定义此变量,并在头文件中将其声明为 extern
。
关于c - 在 C 中声明全局多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14931558/