0

これは私が完全に理解していない声明です。

serv_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;

これは次のことを意味しますか?

  1. 私は入れhph_addr
  2. struct in_addr*タイプのタイプキャストhp->h_addr
  3. これはすべてにコピーされていますs_addr

したがって、serv_addr.sin_addr.s_addr には、選択したホストのホスト名と IP アドレスが含まれます。
これは正しいですか?
(PS:hpはstruct hostent *hp ; hp=gethostbyname(argv[1]);)

4

2 に答える 2

3

アロー演算子を理解する必要があります。

基本的に、構造体へのポインターがある場合、構造体のメンバーにアクセスできます。

したがって、を指す構造体のメンバーにhp->h_addrアクセスできます。次に、構造体のメンバーにアクセスできるように、そのメンバーを にキャストし、逆参照します。h_addrhostenthpin_addr *s_addrin_addr

于 2012-06-13T16:55:29.770 に答える
2

(1)は間違っています。hp->h_addrの略です(*hp).h_addr。これは逆参照とメンバー選択です。

英語では、「 を にコピーします。これにはキャストが必要ですhp」と言うかもしれません。h_addrserv_addrs_addr

于 2012-06-13T16:55:39.157 に答える