c - 在 C99 的结构中分配指向二维空数组的指针

标签 c arrays pointers struct

我有一个 2d 缓冲区,我想将其与其他值一起传递给线程,因此我需要将其移动到结构中。当我尝试这样做时,我无法再次访问我的结构中的值,我需要一些帮助。

这是我的缓冲区:

void* mybuff[8][16384];

我想在这样的结构中存储指向此二维数组的指针:

typedef struct  {
  int i;
  void *mybuff;
} arg_struct_t;

但是,如果我尝试访问这些值:

    arg_struct_t *args = malloc(sizeof(arg_struct_t));
    args->i = index;
    args->mybuff = mybuff;

    fprintf(stderr, "%p\n", args->mybuff[0][0]);

我得到一个错误:

main.c:104:47: warning: dereferencing ‘void *’ pointer [enabled by default]
           fprintf(stderr, "%p\n", args->mybuff[0][0]);
                                               ^
main.c:104:50: error: subscripted value is neither array nor pointer nor vector
           fprintf(stderr, "%p\n", args->mybuff[0][0]);
                                                  ^

我想我需要告诉 C99 更多关于我想放入我的结构中的数据的形状,但我不太清楚这样做的正确方法。我感谢这里的任何帮助或见解。

最佳答案

编译器不知道,它必须在这里计算内存中的什么地址:

args->mybuff[0][0]

因为 args->mybuff 只是指向 void 的指针。要处理这样的表达式,编译器需要有关 1) 数组元素大小和 2) 至少一个数组维度的信息。 以下代码更正确:

typedef void* TBuff[8][16834];
TBuff mybuff;

typedef struct  {
  int i;
  TBuff * mybuff;
} arg_struct_t;

arg_struct_t *args = malloc(sizeof(arg_struct_t));
args->i = index;
args->mybuff = &mybuff;
fprintf(stderr, "%p\n", (*args->mybuff)[0][0]);

关于c - 在 C99 的结构中分配指向二维空数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154731/

相关文章:

c - 连接 5 游戏的位板?

c - 自动填充数组

javascript - Lodash:过滤对象数组并检查是否为空

c++ - 使用共享指针时是否需要设置析构函数方法?

sql - 从数据源名称获取实例名称

c - C 中的正则表达式

二维数组的正确下标排序

c++ - 返回指向新数组的指针

c - 灵活数组成员(零长度数组)

iOS Swift 添加对象到数组