[英]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是整數)。
好吧, 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)); }
除了已經提到的名稱沖突,您分配one
是錯誤的。 它應該是 ...
one = malloc(10 * sizeof(a));
...甚至更好...
one = malloc(10 * sizeof(*one));
。 您對two
和two[x]
分配是可以的,但是如果以與上面我后面的示例相同的方式重寫,它們會更好。
if(one[x].two[a][b] == x) one[x].two[a][b].b1 =2;
one[x].two[i][j]
(對於整數i
和j
)的類型為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.