c - void* 指向二维数组

标签 c arrays pointers

我有一个结构:

struct foo
{
  void *param;
};

void main(){
  foo object;
}

我需要使 object.param 指向动态分配的二维数组。

我知道这显然行不通:

//CASE 1
pixel **buf = (pixel**)malloc(16*sizeof(pixel*));
for(int i=0; i<16;i++)
   buf[i] = (pixel*)malloc(16*sizeof(pixel));

object.param = (void **)buf

这有效:

//CASE 2
pixel buf[16][16];
object.param = (void *)buf;

我的问题是:

  1. 在情况 2 中,为什么将 buf 解释为 pixel 类型的指针(实际上 buf 存储 pixel*) 允许将其转换为 void*
  2. 如何使案例 1 发挥作用?

最佳答案

这应该可以正常工作:

int main(){
    struct foo object;

    struct pixel **buf = malloc(10*sizeof(struct pixel*));
    for(int i=0; i<10;i++)
    buf[i] = malloc(10*sizeof(struct pixel));

    object.param = buf;
}

强制转换不是必需的,因为这是 C 语言,所以您需要使用 struct Pixel 而不是 pixel

关于c - void* 指向二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620218/

相关文章:

c - 指向链表的指针数组

c - 我是否错误地使用了 scanf?

c - 字符串指针,统计单词中的字母数量

c - c库函数如何存放在内存中?

python - 使用“函数”中的 "for loop"打印数据帧每列的最小值/最大值

c - 如何获得与出现次数相对应的字母进行排序?

c - 这是如何取消引用的?

c - 在内核空间中使用strsep来分隔字符串

c++ - 问:std::tuples/std::array

java - ArrayList 内容检查整个数组