[英]void* pointing to 2D array
我有一个结构:
struct foo
{
void *param;
};
void main(){
foo object;
}
我需要使object.param指向动态分配的2D数组。
我知道这显然是不行的:
//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;
我的问题是:
buf
解释为类型为pixel
的指针(实际上buf
存储pixel*
),因此可以将其转换为void*
? 这应该工作正常:
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
。
第二种情况有效,因为您可以将任何指针强制转换为void*
。
出于同样的原因,如果您使用object.param = (void *)buf
或object.param = buf
用作第一种情况。
请记住,C语言中的foo[M][N]
类型的2D数组实际上是M×N个元素的1D数组,类型为foo*
。 如果声明foo[10][3] a; foo *p = a;
foo[10][3] a; foo *p = a;
那么foo[i][j]
和p[i*10+j]
意思完全相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.