[英]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.