[英]How do you access an array of structs of pointers to lists in C?
typedef struct A {
struct B *b;
} A;
typedef struct B {
int x;
struct B *next;
} B;
A Table[10];
所以我有這兩個結構,它應該是一個結構 A 的數組,其中包含指向其他結構 B 的指針(它們將創建一個列表)。 我想訪問例如表 [5] 的指針。 我的代碼給了我一個錯誤“分配時類型不兼容。我無法對結構的格式進行任何更改。這是我的代碼:
struct B* d_root;
d_root=Table->b[5];
你應該使用d_root = Table[5].b;
而不是這個d_root=Table->b[5];
你有一個 Table 數組並訪問table[5]
你應該使用Table[5].member
而不是Table.member[5]
另請注意->
不是正確的運算符,請查看->
的用法:
struct *struct_name;
(*struct).struct_member;
因為上面的程序是很少的硬編碼,我們可以使用:
struct *struct_name;
struct->struct_member;
但是在這里使用 operator ->
Table[5]->b
是錯誤的。 (注意:Table->b 是對的,但它會指向數組的第一個)。
在您的代碼中,此Table->b[5]
表示數組Table
的第一個元素中數組b
的第五個元素。
標識符 Table 被聲明為具有數組類型
A Table[10];
因此,要訪問一個元素,您必須指定它的索引以使用指針算法。
d_root = Table[5].b;
或者
d_root = ( Table + 5 )->b;
或者
d_root = ( *( Table + 5 ) ).b;
反過來,如果指針b
指向動態分配的數組,則指向 select 您可以編寫的所需元素
d_root = Table[5].b[i];
或者
d_root = ( Table + 5 )->b[i];
或者
d_root = ( *( Table + 5 ) ).b[i];
其中i
是指針b
指向的動態分配數組中的索引。
要訪問由指針b
指向的 object 的數據成員,您可以編寫例如
int x = Table[5].b[i].x;
或者
int x = ( Table + 5 )->b->x;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.