none
FAR *请问这个语句是何意思 RRS feed

  • 问题

  • pMouseHook=(MOUSEHOOKSTRUCT FAR *)lparam;

    请问这个语句是何意思

    我在网上查到FAR是原指针的意思,但是不明白具体的使用格式,请问这里的 FAR * 是什么意思

    谢谢

    2013年4月29日 6:41

答案

  • FAR,NEAR或far,near是DOS,16位Win时代的修饰符。
    那时内存地址是以实模式方式分段组织的。
    可寻址的范围是2^20=1024K=1M
    又因为是16位的寄存器所以一个段为2^16=64K

    当程序要访问段内地址时默认就是NEAR/near方式。
    寻址时仅仅包含段偏移就可以了。

    而要访问其他段的地址时,就需要加FAR/far修饰符。
    这时,寻址时不但要求段偏移还要有段基址信息。

    而32位Windows与16位Windows的重要区别就是指针宽度均为32位,
    不再有near和far区别,内存模式也不是基于分段模式。
    所以在32位Windows程序中,对FAR,NEAR或far,near已经不区别了。
    所以可以忽略它。

    WINDEF.H头文件中已经将FAR,NEAR或far,near定义为空字符。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 wjsta 2013年4月30日 4:00
    2013年4月29日 13:41
    版主

全部回复

  • FAR,NEAR或far,near是DOS,16位Win时代的修饰符。
    那时内存地址是以实模式方式分段组织的。
    可寻址的范围是2^20=1024K=1M
    又因为是16位的寄存器所以一个段为2^16=64K

    当程序要访问段内地址时默认就是NEAR/near方式。
    寻址时仅仅包含段偏移就可以了。

    而要访问其他段的地址时,就需要加FAR/far修饰符。
    这时,寻址时不但要求段偏移还要有段基址信息。

    而32位Windows与16位Windows的重要区别就是指针宽度均为32位,
    不再有near和far区别,内存模式也不是基于分段模式。
    所以在32位Windows程序中,对FAR,NEAR或far,near已经不区别了。
    所以可以忽略它。

    WINDEF.H头文件中已经将FAR,NEAR或far,near定义为空字符。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 wjsta 2013年4月30日 4:00
    2013年4月29日 13:41
    版主
  • 哦 我就是想知道  FAR后面加 *  是何含义

    以及FAR的具体的使用格式  可以解答下吗 谢谢啦

    2013年4月29日 21:06