簡體   English   中英

如何在C中在另一個結構內使用結構(同時使用malloc和2D數組?)

[英]How to use a struct inside another struct (while using malloc and 2D arrays?) in C

我是使用struct的新手,希望您能為我提供幫助。 我想要一個嵌套結構,以使A的成員是B型結構。 我到目前為止的代碼如下所示。

typedef struct B
{
   int b1;
} b;

typedef struct A
{
    b a1;
}a;

但是我還需要將'a1'設為動態2d數組,因此我執行了以下代碼(不確定這樣做是否正確,因為我為此使用了指向指針的指針,以便在運行時設置'array'的大小):

typedef struct B
{
   int b1;
} b;

typedef struct A
{
    b **a1;
}a;    

為了存儲內存,我使用了malloc(didnt包括錯誤檢測部分)。 我需要通過x來引用和比較a1的每個成員,如下所示(其中a和b是整數)。 我可以這樣做嗎?:

a* one;
b** two;

one= malloc(10* sizeof(a*));
two= malloc(10* sizeof(b*));
for(x = 1; x <= 10; x++)
    {
        two[x] = malloc(10* sizeof(b));
    }

 if(one[x].two[a][b] == x)
    one[x].two[a][b].b1 =2;

抱歉,我的代碼根本沒有意義。

我還需要將“ a1”設為2d數組,所以我做了以下代碼(不確定這是否正確):

 typedef struct B { int b1; } b; typedef struct A { b **a1; }a; 

該代碼提供了有效的C聲明,但是看不到2d數組。 struct A成員a1是指向struct B指針,這根本不是同一回事。 如果您確實要聲明2d數組,則必須給出其邊界,例如

typedef struct A {
    b a1[5][7];
} a;

但是,如果直到運行時才知道所需的大小,那么雙指針確實是您想要的-只是不要將其與2D數組混淆。

為了存儲內存,我使用了malloc(didnt包括錯誤檢測部分)。 我需要通過x來引用和比較a1的每個成員,如下所示(其中a和b是整數)。

好吧, ab不能是整數,因為您已經在同一范圍內將它們用作類型名稱。

我可以這樣做嗎?:

 a* one; b** two; one= malloc(10* sizeof(a*)); two= malloc(10* sizeof(b*)); for(x = 1; x <= 10; x++) { two[x] = malloc(10* sizeof(b)); } 

除了已經提到的名稱沖突,您分配one是錯誤的。 它應該是 ...

 one = malloc(10 * sizeof(a));

...甚至更好...

 one = malloc(10 * sizeof(*one));

您對twotwo[x]分配是可以的,但是如果以與上面我后面的示例相同的方式重寫,它們會更好。

  if(one[x].two[a][b] == x) one[x].two[a][b].b1 =2; 

one[x].two[i][j] (對於整數ij )的類型為b ,即struct B x的類型為int 這些是不可比較的,因此不能,您不能在if條件下評估表達式。 不過,對one[x].two[a][b].b1是可以的。

您可以搞亂2D數組和1D數組,而不用搞亂2D動態內存分配。

b *a1;
a1 = malloc(sizeof(b) * width * height);
for(i = 0; i < height; i++)
    for(j = 0; j < width; j++)
        do_stuff(a1[i*width + j];  //simulates a1[i][j]

唯一需要做的就是將寬度和高度值存儲在某個地方,例如

typedef struct A {
    b *a1;
    int height;
    int width;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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