关于获取一个union的内部字段

kingteng 2012-09-10 04:23:32

有如下一段代码,为何在外部可以访问ev_ncalls而不需要经过_ev和ev_signal两层封装呢?
我自己用gcc也编译不过,我是看到libevent源码里这么写的,在其他地方也看到过,我写了下也编不过去所以来问下
struct event *ev;
int ncall = ev->ev_ncalls;

struct event {
union {
/* used for io events */
struct {
TAILQ_ENTRY(event) ev_io_next;
struct timeval ev_timeout;
} ev_io;

/* used by signal events */
struct {
TAILQ_ENTRY(event) ev_signal_next;
short ev_ncalls;
/* Allows deletes in callback */
short *ev_pncalls;
} ev_signal;
} _ev;

};
...全文
180 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-09-10
  • 打赏
  • 举报
回复
楼主断章取义了吧.
自信男孩 2012-09-10
  • 打赏
  • 举报
回复
嗯,你可以通过类型转换,将结构体变量转换为char类型的数组,通过memcpy实现。通过下表可以获取你想要的变量数据。这个方法你要注意结构体对齐这一点。
xmu_才盛 2012-09-10
  • 打赏
  • 举报
回复
哦,学习了。。。。
[Quote=引用 1 楼 的回复:]

用匿名的方式就可以直接寻址的:
C/C++ code

struct event
{
union {
/* used for io events */
struct {
TAILQ_ENTRY(event) ev_io_next;
……
[/Quote]
kingteng 2012-09-10
  • 打赏
  • 举报
回复
但是我贴的代码不是匿名的啊,为什么也能呢?
图灵狗 2012-09-10
  • 打赏
  • 举报
回复
用匿名的方式就可以直接寻址的:

struct event
{
union {
/* used for io events */
struct {
TAILQ_ENTRY(event) ev_io_next;
struct timeval ev_timeout;
};

/* used by signal events */
struct {
TAILQ_ENTRY(event) ev_signal_next;
short ev_ncalls;
/* Allows deletes in callback */
short *ev_pncalls;
};
};
};

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧