【问题标题】:How do you access an array of structs of pointers to lists in C?如何访问 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; 字段不是数组时是数组。 `

标签: c arrays list struct


【解决方案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 的第一个元素中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2011-08-10
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多