簡體   English   中英

帶有指針的結構和C中的結構數組

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

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