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)最终表示的是什么意思 能否给详细解释一下
我想知道这句话是什么意思
-
- 帖子: 23
- 注册时间: 2011-04-06 12:16
-
- 帖子: 23
- 注册时间: 2011-04-06 12:16
Re: 我想知道这句话是什么意思
额 没人知道吗 自己顶 

- qgymib
- 帖子: 539
- 注册时间: 2010-04-02 16:44
- 系统: openSUSE 13.2 x64
Re: 我想知道这句话是什么意思
拆分一下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多时间没用了,可能有不正确的地方,多多包涵~

正在建设中的个人博客
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 我想知道这句话是什么意思
ls的搞错了
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 转换后的指针所指的值
代码: 全选
*((struct in_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
-
- 帖子: 23
- 注册时间: 2011-04-06 12:16
Re: 我想知道这句话是什么意思
给力 经你们这么一分析 貌似很明朗了 一步步的做 总会出结果的fanhe 写了:ls的搞错了1. h->h_addr: 也就是 h 的结构体的 h_addr 成员, 应该是一个指针代码: 全选
*((struct in_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 转换后的指针所指的值
