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

woshialber 2004-05-03 11:13:12
最近在学习socket的编程中查看一些结构体(如hostent)时发现这种定义
char FAR*,char FAR FAR**的定义?
这是啥意思啊?这和char*,char**有什么不一样吗?
...全文
14 14 点赞 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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信息的结构吧?
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-03 11:13
社区公告
暂无公告