访问结构中的数据

时间:2013-08-28 08:33:36

标签: c pointers struct

如果有人可以帮助我,我想访问结构中的信息。

typedef struct {        
    int time;       
    char sat,rcv;  
    char LLI [3];
} obsd_t;


typedef struct {                
    obsd_t *data;      
} obs_t;

我有类似

的东西
obs_t obs;
int x;

现在我想将x分配给obsd_t中的时间值,那么我应该怎么做。这是正确的

x=obs.data.time;

p.s我查看了stackoverflow的其他线程,但从那里无法理解。有些人没有接受任何答案,所以我不情愿

6 个答案:

答案 0 :(得分:6)

您正在将指针与变量混合。使用.运算符作为结构变量(例如obs)并使用->作为指针(例如数据)

即。

x = obs.data->time

或者您也可以按照 Yu Hao

的建议使用

x = obs.(*data).time

答案 1 :(得分:4)

你只需要这样做:

x=obs.data->time;

(当然,假设您已将obs.data初始化为指向obsd_t的有效实例。)

答案 2 :(得分:3)

你应该改用:

x = obs.data->time;

因为data中的obs_t是指针。

一般情况下,假设strcut foo* p;,然后访问bar中的元素struct foo

(*p).bar

p->bar

是相同的

答案 3 :(得分:3)

data是指向obsd_t结构的指针。您必须使用运算符->而不是.来访问指针引用的结构的元素:

x = obs.data->time;

答案 4 :(得分:2)

使用data运算符访问->作为指针到结构:

x = obs.data->time;

使用data运算符(取消引用指针)访问*地址

x = obs.(*data).time

两种变体都是对的。

阅读本文以获取更多详细信息:Pointers and Structures

答案 5 :(得分:2)

如果你想访问这样的结构:x=obs.data.time;你必须以不同的方式声明你的obs_t

typedef struct {                
    obsd_t data;      
} obs_t;

请熟悉指针的工作原理,以便将来避免出现此类问题。