typedef struct hostent 
{  char FAR* h_name;  
   char FAR  FAR** h_aliases;  
   short h_addrtype;  short h_length;  
   char FAR  FAR** h_addr_list;
} hostent;以上为在MSDN中看到的hostent的结构定义,不太明白,请哪位给解释一下所出现的FAR及FAR*,FAR**的具体用途和含义!最好详细一些!
多谢!

解决方案 »

  1.   

    它是原来的16位Windows,如Windows3.2的遗留物。在16位Windows中,内存是分段的(学过8086汇编语言的话,应该很清楚这个概念),所以指针分为两类:FAR指针和NEAR指针。FAR表示指示的是另外一个段或者说全局地址,NEAR表示指示的是本段内部的地址。
    到了Win32中,内存具有32位的线性地址,没有分段的概念了,但是为了照顾Win16程序员的习惯,FAR和NEAR都被保留了下来,但是它们的意思是一样的,都表示指针(其实不使用它们也可以)。
    还有Win32中的LP(Long Pointer)中的L(Long)也是一样的道理。
      

  2.   

    那么,如果我调用该函数时,对于typedef struct hostent 
    {  char FAR* h_name;  
       char FAR  FAR** h_aliases;  
       short h_addrtype;  short h_length;  
       char FAR  FAR** h_addr_list;
    } hostent;
    我可否用
    typedef struct my_hostent 
    {  char * h_name;  
       char ** h_aliases;  
       short h_addrtype;  short h_length;  
       char ** h_addr_list;
    } my_hostent;
    这样的结构体参数调用呢?