typedef struct A {
struct B *b;
} A;
typedef struct B {
int x;
struct B *next;
} B;
A Table[10];所以我有这两个结构体,它应该是一个结构体A的数组,包含指向其他结构体B的指针(它们将创建一个列表)。例如,我想访问table5的指针。我的代码给了我一个错误:“赋值时类型不兼容。我无法对结构的格式进行任何更改。以下是我的代码:
struct B* d_root;
d_root=Table->b[5];发布于 2020-04-05 22:44:41
您应该使用d_root = Table[5].b;而不是此d_root=Table->b[5];
您有一个表的数组,要访问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的第一个元素中。
发布于 2020-04-05 23:12:09
标识符表被声明为具有数组类型
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;https://stackoverflow.com/questions/61044151
复制相似问题