[英]Structure with pointer and array of structures in C
我試圖學習C中的嵌套結構和指針。我將其作為測試:
typedef struct xyz xyz_t;
struct xyz{
int x, y, z;
};
xyz_t array[] = {
{.x = 14, .y = 16, .z = 18},
{.x = 34, .y = 36, .z = 38},
{.x = 64, .y = 66, .z = 68},
};
typedef struct blue blue_t;
struct blue
{
int *pointer;
};
int main()
{
blue_t red;
red.pointer = &array;
printf("%d",red.pointer[1].z);
}
想法是讓red
結構體具有指向array
的指針,然后print f.ex. array[1].z
print f.ex. array[1].z
。
我究竟做錯了什么? 編譯器告訴我:
從不兼容的指針類型分配
[-Wincompatible-pointer-types]
red.pointer = &array;
請求成員
x
使用非結構或聯合printf("%d",red.pointer[2].x);
想法是使結構“ red”具有指向“ array”的指針,然后打印f.ex。 陣列[1] .Z。
在這種情況下,您需要在“藍色”結構中有一個指向xyz_t
的指針。
struct blue
{
xyz_t *pointer;
};
您需要刪除&
此red.pointer = &array;
。 array
將被轉換為指向red.pointer = array;
第一個元素的指針red.pointer = array;
哪種是正確的類型(以匹配LHS),請參閱什么是數組衰減? ; 而&array
的類型為struct xyz (*)[3]
。
另外,您可以為main函數使用適當的簽名( int main(void)
)。 red
可能是blue_t
類型的令人困惑的變量!
這應該是固定的。 看看是否有幫助:
typedef struct xyz{
int x, y, z;
} xyz_t;
xyz_t array[] = {
{.x = 14, .y = 16, .z = 18},
{.x = 34, .y = 36, .z = 38},
{.x = 64, .y = 66, .z = 68},
};
typedef struct {
xyz_t *pointer;
} blue_t;
int main()
{
blue_t red;
red.pointer = &array;
printf("%d",red.pointer[1].z);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.