c - 在 C 中声明全局多维数组

标签 c pointers multidimensional-array global-variables declaration

因此,我尝试全局声明一个 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/

相关文章:

c - 使用 char 指针与 char 数组

c - 写数据到寄存器

c++ - 当类包含二维数组时,如何将类用作 map 的键?

c - 在 C 中使用指针算法访问二维数组元素

c - 如何指示 OSS ASN.1 工具仅为 NB-IoT 特定消息生成编解码器

C:我的程序出了什么错误?

c - C 中指针的传递和赋值

c - 二维数组中缺少最后一个元素

c - SSE:有条件地替换像素

c++ - 使用 C++ 编译器编译 C 代码会出现什么问题?