如何访问 C 中指向列表的指针结构数组?
Posted
技术标签:
【中文标题】如何访问 C 中指向列表的指针结构数组?【英文标题】:How do you access an array of structs of pointers to lists in C? 【发布时间】:2020-07-17 12:39:38 【问题描述】: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];
【问题讨论】:
不应该只是Table[5].b
吗?
Table->b[5]
表示struct B *b;
字段不是数组时是数组。 `
【参考方案1】:
标识符 Table 被声明为具有数组类型
A Table[10];
所以要访问一个元素,你必须指定它的索引来使用指针算法。
d_root = Table[5].b;
或
d_root = ( Table + 5 )->b;
或
d_root = ( *( Table + 5 ) ).b;
反过来,如果指针b
指向一个动态分配的数组,那么选择你可以写入的所需元素
d_root = Table[5].b[i];
或
d_root = ( Table + 5 )->b[i];
或
d_root = ( *( Table + 5 ) ).b[i];
其中i
是指针b
指向的动态分配数组中的索引。
要访问指针b
指向的对象的数据成员,你可以这样写
int x = Table[5].b[i].x;
或
int x = ( Table + 5 )->b->x;
【讨论】:
【参考方案2】:你应该使用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;
但是在这里使用->
Table[5]->b
是错误的。
(注意:Table->b 是对的,但它会指向数组的第一个)。
在您的代码中,此Table->b[5]
表示数组b
的第五个元素在数组Table
的第一个元素中。
【讨论】:
以上是关于如何访问 C 中指向列表的指针结构数组?的主要内容,如果未能解决你的问题,请参考以下文章