我有一个结构:
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;
我的问题是:
- 在情况 2 中,为什么将
buf
解释为pixel
类型的指针(实际上buf
存储pixel*
) 允许将其转换为void*
? - 如何使案例 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/