我想知道这句话是什么意思

C、C++和Java语言
回复
God_In_You
帖子: 23
注册时间: 2011-04-06 12:16
送出感谢: 0
接收感谢: 0

我想知道这句话是什么意思

#1

帖子 God_In_You » 2011-06-03 9:36

struct hostent *h;
h=gethostbyname(argv[1]);
printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)h->h_addr)))


char * inet_ntoa(struct in_addr in)
inet_ntoa的参数是一个in_addr的结构体 怎么语句里成了指针?
*((struct in_addr *)h->h_addr)最终表示的是什么意思 能否给详细解释一下
God_In_You
帖子: 23
注册时间: 2011-04-06 12:16
送出感谢: 0
接收感谢: 0

Re: 我想知道这句话是什么意思

#2

帖子 God_In_You » 2011-06-03 10:39

额 没人知道吗 自己顶 :em06
头像
qgymib
帖子: 539
注册时间: 2010-04-02 16:44
系统: openSUSE 13.2 x64
送出感谢: 2 次
接收感谢: 9 次

Re: 我想知道这句话是什么意思

#3

帖子 qgymib » 2011-06-03 12:08

inet_ntoa(*((struct in_addr *)h->h_addr))
拆分一下
(struct in_addr *)h : 将指针h强制转换为in_addr类型
(struct in_addr *)h->h_addr : 指针h所指向的结构体中的内容,此处为h_addr,这个h_addr应该是一个指针
*((struct in_addr *)h->h_addr) : 取出h_addr指向的内容,按照你的说法应该就是一个in_addr类型的结构体

C++ N多时间没用了,可能有不正确的地方,多多包涵~ :em04
正在建设中的个人博客
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45
送出感谢: 0
接收感谢: 9 次

Re: 我想知道这句话是什么意思

#4

帖子 fanhe » 2011-06-03 14:22

ls的搞错了

代码: 全选

*((struct in_addr *)h->h_addr)
1. h->h_addr: 也就是 h 的结构体的 h_addr 成员, 应该是一个指针
2. ((struct in_addr *)h->h_addr): 即把 h->h_addr 这个指针强制转为 struct in_addr 类型的指针
3.*((struct in_addr *)h->h_addr): 取 2 转换后的指针所指的值
头像
qgymib
帖子: 539
注册时间: 2010-04-02 16:44
系统: openSUSE 13.2 x64
送出感谢: 2 次
接收感谢: 9 次

Re: 我想知道这句话是什么意思

#5

帖子 qgymib » 2011-06-03 16:41

看来我又在优先级上犯了错了 :em21
建议lz以后和我一样在凡是可能出现歧义的地方都加上括弧吧 :em11
正在建设中的个人博客
God_In_You
帖子: 23
注册时间: 2011-04-06 12:16
送出感谢: 0
接收感谢: 0

Re: 我想知道这句话是什么意思

#6

帖子 God_In_You » 2011-06-08 16:31

fanhe 写了:ls的搞错了

代码: 全选

*((struct in_addr *)h->h_addr)
1. h->h_addr: 也就是 h 的结构体的 h_addr 成员, 应该是一个指针
2. ((struct in_addr *)h->h_addr): 即把 h->h_addr 这个指针强制转为 struct in_addr 类型的指针
3.*((struct in_addr *)h->h_addr): 取 2 转换后的指针所指的值
给力 经你们这么一分析 貌似很明朗了 一步步的做 总会出结果的 :em09
回复

回到 “C/C++/Java”