那位大虾解释一下远指针?

woshialber 2004-05-03 11:13:12
最近在学习socket的编程中查看一些结构体(如hostent)时发现这种定义
char FAR*,char FAR FAR**的定义?
这是啥意思啊?这和char*,char**有什么不一样吗?
...全文
37 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
在tc中
有模式tiny small
代码段和数据段都是小于64K的,所以用near指针就可以访问

但是,一旦数据或代码超过了64K(比如,我的程序特别长,或我定义了好多数组,总大小超过了64k,那么这些数据或代码就不可能在同一个段(64K)里面了,要访问这些数据就必须用远指针了

hostent这个结构体
我不太清楚:(
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
这个段指的是64k的段

在tc中

#include <stdio.h>

void main()
{
char far *pfc;
char *pc;
printf("%d %d",sizeof(pfc),sizeof(pc));

}

程序的输出结果是
4 2
由此可知远指针是32位的,近指针是16位的

16位的寻址范围是2^16=64K
为了能访问别的段必须由32位的指针进行访问,
这32位包括了16位段地址,16位偏移地址
woshialber 2004-05-03
  • 打赏
  • 举报
回复
to cngdzhang :
可否说的详细点?
恩,比如说:什么情况下要用远指针?为什么hostent这个结构体要用到char FAR*?
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
远指针far和近指针near是相对的

如果不特别说明far,那么默认的是近指针

远指针指的是不在同一个段中的指针
近指针指的是在同一个段的指针

dongni386 2004-05-03
  • 打赏
  • 举报
回复
<<C语言高级实用教程>>(清华大学出版社 1992)上面讲的很详细.汇编方面的书
应该也有介绍
julyclyde 2004-05-03
  • 打赏
  • 举报
回复
我也不懂。只是看书上说的已经没有了
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
在这个网页最下面


管理 | 关闭窗口


看到了吗?

不用谢:)
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
win32 用的是保护模式
直接用的是32位指针,寻址范围为2^32=4GB
当然没有远近指针之分了
woshialber 2004-05-03
  • 打赏
  • 举报
回复
to julyclyde(ASP版社区之星):是不是在win32下就没有远指针了阿?
to antijpn(antijpn):是啊是啊,hostent应该就是包含host信息的结构
to cngdzhang:怎么给你加分阿:(。
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
不客气

结帖
点下面的 管理 连接
woshialber 2004-05-03
  • 打赏
  • 举报
回复
十分感谢各位高手的指点,尤其是cngdzhang大虾:)
我是第一次在这里提问题,得到这么多的帮助十分高兴
可是我怎么找不到,结贴和给各位加分的按钮阿:(。
julyclyde 2004-05-03
  • 打赏
  • 举报
回复
过时了
inside VC++说现在已经不分远近了
liushuaiboy 2004-05-03
  • 打赏
  • 举报
回复
mark
antijpn 2004-05-03
  • 打赏
  • 举报
回复
在32bit环境里面都是32bit的指针,原来应该还有个巨指针,也是32bit的,没什么区别了

hostent应该是包含host信息的结构吧?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧