union的问题

jiaojiaobao 2011-02-14 02:15:22
我定义了
typedef union
{
struct sockaddr sa;
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
} sockaddr_union;

sockaddr_union *sockaddr;

书上说union的地址和它成员的地址是一样的,为什么我用&(sockaddr),和&(sockaddr->sa)得到的地址不同那?
...全文
100 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaiguo 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 maoloverme1 的回复:]
你应该比较sockaddr和&(sockaddr->sa)的值,而不是比较&(sockaddr),和&(sockaddr->sa)
[/Quote]

支持,不同的东西,比较没有意义!
jiaojiaobao 2011-02-14
  • 打赏
  • 举报
回复
大家 说得都正确
bluesky12312388 2011-02-14
  • 打赏
  • 举报
回复
&(sockaddr),和&(sockaddr->sa)//去掉前面的那个&,地址才一样

&(sockaddr)表示的是 sockaddr指针的地址
jiaojiaobao 2011-02-14
  • 打赏
  • 举报
回复
有道理,我试试,一会给分啊
kideagle 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]
你这儿sockaddr本身是一个指针了
[/Quote]
是这个道理
qq120848369 2011-02-14
  • 打赏
  • 举报
回复
&(sockaddr)是指针的地址,&(sockaddr->sa)是成员的地址,完全两码事。

sockaddr和& (sockaddr->sa)是同一个地址。

还有,你的指针没有分配内存,建议赋值为0方便观察:sockaddr_union *sockaddr=0;
maoloverme1 2011-02-14
  • 打赏
  • 举报
回复
你应该比较sockaddr和&(sockaddr->sa)的值,而不是比较&(sockaddr),和&(sockaddr->sa)
昵称很不好取 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]
你这儿sockaddr本身是一个指针了
[/Quote]
up~~
改成普通成员对象试试
xiaoguailong3 2011-02-14
  • 打赏
  • 举报
回复
你这样输出的不是地址吧?输出%p看看
justkk 2011-02-14
  • 打赏
  • 举报
回复
你这儿sockaddr本身是一个指针了

69,373

社区成员

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

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