簡體   English   中英

void *指向2D數組

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

我的問題是:

  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

第二種情況有效,因為您可以將任何指針強制轉換為void*

出於同樣的原因,如果您使用object.param = (void *)bufobject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM