簡體   English   中英

如何訪問指向 C 中列表的指針結構數組?

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

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