结构中的C结构

时间:2013-12-06 17:30:46

标签: c struct typedef

我有一个typedef结构,用于定义队列中的元素。在定义中,我有另一个具有自己值的typedef结构。

typedef struct q_elem_s
{
    def_task task;
    int arrive_time;
    struct q_elem_s *next;
} q_elem;

内部q_elem_s是def_task任务,由:

定义
typedef struct task_s
{
    int id;
    int length;
} def_task;

当我想访问def_task任务中的值时,我收到以下错误:

“' - >'的无效类型参数(有'def_task')

我做错了什么?

2 个答案:

答案 0 :(得分:3)

->.运算符都用于访问结构字段。主要区别在于,当您拥有指向结构变量的指针时会使用->,而当您拥有结构变量时会使用.。例如:

q_elem* q;   /* q stores the address to a q_elem structure */
q_elem q;    /* q stores the q_elem structure */

现在,在第一种情况下,要访问结构的成员,您必须使用->运算符来引用它们。

q_elem* q;
q->task;     /* access to def_task */

如果你有一个结构变量,你可以这样做:

q_elem q;
q.task;     /* access to def_task */

在您的结构q_elem中,task被定义为结构,而不是指向结构的指针。这意味着,一旦您有权访问task内的q_elem结构,就可以通过task(点)运算符来访问.的字段。

这给你两个选择:

q_elem* q;
q_elem->task.id

q_elem q;
q_elem.task.id

注意q_elem变量声明之间的区别。

我希望这能解释一下。

答案 1 :(得分:2)

如果您有q_elem并且想要从其任务中访问id,则可以使用task.id。请注意,您没有def_task指针(def_task*),它需要一个箭头而不是def_task值。尝试这样做:

q_elem q;
q.task.id = 12;