c结构的struct成员数组

时间:2015-04-06 00:49:53

标签: c arrays struct member

我有这两个结构

struct List {
    unsigned length;
    char * value;
};

struct bal {
    List name;              
    List ** attributes;     
};

所以struct List将处理一个字符串,我通过char添加char(使用malloc的函数)来创建我的字符串。

我的struct bal是两个成员,一个是结构列表的名称,另一个成员是结构列表的数组,所以我可以将属性添加到struct bal。

在尝试访问struct bal的属性列表之前,我没有问题。如果我的struct bal为3个属性,那么我的属性列表的表示应该是这样的:

attributes[0];
attributes[1];
attributes[2];

每个位置都是一个结构列表。所以,如果我想说printf属性,我的想法是,我要做的事情是:

bal firstBal;

假设我在程序中添加了3个属性。

然后打印它我要做:

printf( "The first attributes is : %s ", firstBal->attributes[0]->value);

但是当我这样做时,我得到错误:

error: request for member value in something not a structure or union

但我不明白为什么?我的struct bal有一个struct List的成员,所以当我在该数组中添加一个struct List时,我应该能够访问我的struct List的成员Value。

我的struct List的成员值是一个字符串,所以......

非常感谢!

2 个答案:

答案 0 :(得分:0)

我发现您的代码存在两个问题:

  1. 您在struct bal

    中提到过这一点
      

    另一个成员是struct List

    的数组

    但是,成员attributes在您的代码中声明为List **,即作为指向List变量数组的指针,我的猜测是这不是您想要的。< / p>

  2. ->运算符用于访问指针变量指向的struct / union 的成员(这就是为什么它看起来像这个箭头的原因)。但是,在您的代码中并非如此,因为firstBal未定义为指针,而是定义为struct bal类型的变量。因此,要使用其成员字段,您应使用.运算符而不是->运算符(即firatBal.attributes)。

    现在,firstBal->attributes[0]的类型取决于您想要的内容。如果您坚持使用List **类型的属性,那就没关系。但是,根据我上面的评论,假设它的正确类型是List *,那么使用数组访问运算符([])已经为您提供了变量而不是指向它的指针。换句话说,firstBal->attributes[0]的类型为List而非List *,这意味着您无法使用->运算符访问其成员,但应使用.运营商

答案 1 :(得分:0)

你需要一份声明:

struct List attributes[3];

它的指针应该是 * pattributes

使用 pattributes =&amp; attributes [0]; 跟随。