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;
但这里使用运算符CCD_ 8 CCD_。(注意:表->b是对的,但它将指向数组的第一个(。
在您的代码中,此Table->b[5]
表示数组Table
的第一个元素中的数组b
的第五个元素。
标识符表被声明为具有数组类型
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];
其中CCD_ 14是指针CCD_。
要访问指针b
指向的对象的数据成员,可以编写例如
int x = Table[5].b[i].x;
或
int x = ( Table + 5 )->b->x;