c - 如何在头文件中声明锯齿状数组?

标签 c header-files jagged-arrays

为了定义锯齿状数组,我使用了 this answer通过@FaisalVasi。这非常有效。要获取此类定义数组的 (i,j) 条目,请键入 (*jagged[i])[j]

但是,我喜欢将我所有的数组放在一个单独的文件中(我的常量数组),然后我必须在头文件中声明它们。而我无法做到这一点。我尝试了 **jagged = unsigned[][]*jagged = unsigned*[],以及我不记得的其他尝试。无论如何,我尝试过的一切都没有用。那么应该如何在头文件中声明锯齿状数组呢?

我是 C 的新手,我希望这个问题很清楚。否则请问我可以澄清什么。

最佳答案

注意:偏离所请求的行指针数组语法并直接指向数组中的行,正如@Someprogrammerdude 所建议的那样,可以获得相同的结果,但是使用更少的间接访问和更清晰的访问语法。

直接行数组解决方案

定义

unsigned jagged_row0[] = { 0, 1, 99 };
unsigned jagged_row1[] = { 1, 2, 3, 4, 5, 6, 99 };

unsigned *jagged[] = (unsigned *[]){ jagged_row0, jagged_row1 };

或者一般来说:

type jagged_row0[] = { ... };
type jagged_row1[] = { ... };
...

type *jagged[] = (type *[]){ jagged_row0, jagged_row1, ... };

声明

extern unsigned *jagged[];

或者一般来说:

extern type *jagged[];

用法

unsigned v_i_j = jagged[i][j];

或者一般来说:

type v_i_j = jagged[i][j];

原始答案

以下解决方案解决了 cited answer 中给出的定义由@FaisalVasi 提供,其中锯齿状数组存储指向锯齿状行的显式指针。

定义(在一些.c文件中)

unsigned jagged_row0[] = {0,1};
unsigned jagged_row1[] = {1,2,3};

unsigned (*jagged[])[] = { &jagged_row0, &jagged_row1 }; /* note the ampersand */

/* or alternatively, since compound literals are lvalues ... */
unsigned (*jagged[])[] = { &(int[]){0,1}, &(int[]){1,2,3} };  

声明

extern unsigned (*jagged[])[];

用法

unsigned *jagged_row;
...
jagged_row = *jagged[i];
unsigned v_i_j = jagged_row[j];  /* value at [i][j] */

或更简洁:

unsigned v_i_j = (*jagged[i])[j];  /* value at [i][j] */

解释

交错行是一些基本类型的数组,在我们的例子中是一个无符号数组(长度由静态初始化确定)(unsigned[]),可以认为,一些注意事项,作为指向无符号 (unsigned *) 的指针。

根据提议的定义,锯齿状数组是指向锯齿状行的指针数组,通过同样的简化,它可以被认为是无符号数组**.

当你索引第一个维度时,你得到的是指向锯齿状行(数组)的指针,然后你必须取消引用这个指针才能到达作为锯齿状行的数组本身,而不是你必须索引这个数组得到最终值。

关于c - 如何在头文件中声明锯齿状数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871249/

相关文章:

.net - .NET中锯齿状数组的内部结构

c - c程序中的汇编代码

c - 如何为连接重新分配字符指针?

linux - 在 Linux 中注册 header 搜索位置的常用机制是什么?

header-files - 用automake将头文件放在/usr/include的子目录中?

javascript - 访问交错数组中的元素

c - 解析内存映射文件C

c - 对 `sin` 的 undefined reference

c++ - 如何从头文件中读取输入?

python - Numpy: "jagged"3D 数组中一维的平均值