我有一个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')
我做错了什么?
答案 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;