熟悉编程的通常会用到一些LP开头的数据类型来定义指针,比如以下VS里minwindef.h中的部分内容:

typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef float               FLOAT;
typedef FLOAT               *PFLOAT;
typedef BOOL near           *PBOOL;
typedef BOOL far            *LPBOOL;
typedef BYTE near           *PBYTE;
typedef BYTE far            *LPBYTE;
typedef int near            *PINT;
typedef int far             *LPINT;
typedef WORD near           *PWORD;
typedef WORD far            *LPWORD;
typedef long far            *LPLONG;
typedef DWORD near          *PDWORD;
typedef DWORD far           *LPDWORD;
typedef void far            *LPVOID;
typedef CONST void far      *LPCVOID;

其中有用到near和far,简单来看分别是定义短指针和长(L)指针。可以验证typedef时用near修饰指针长度是far修饰指针长度的一半。由于以前没看见过,就好奇查了查,总结了以下结果:

near和far是在定义近指针、远指针需要用到的,是16位CPU造就的怪胎;
现在的32位以上的CPU已经没有这种形式了。

16位CPU(主要指80386和80486)内部数组总线为16位,地址总线为24位。这就意味着一个字(16bit)存不下一个地址,要用到两个字。习惯把高位字称为段地址,低位字称为偏移地址。
程序运行时,OS会给程序分配几个内存段供程序使用,主要的有代码段(CS)、数据段(DS)、堆栈段(SS)。根据不同的编译模式这几个段可能重合。

当指针指向的地址与数据段的段地址相同(即处于数据段内),这时可以不记录段地址而仅记录偏移地址(只需16bit)。这种指针称为近指针(near指针)。

当指针指向的地址与数据段的段地址不同(即处于数据段外),这里不仅要记录偏移地址还要记录段地址(共需32bit)。这种指针称为远指针(far指针)。

C语言里的near和far是什么意思?相关推荐

  1. ebnf描述c语言语句结构,EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则...

    Presentation on theme: "EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构:并用操作语义的方法描述对应的语义规则"- Pre ...

  2. c语言里变量列表,嵌入式C语言里的土豪们之变量类型

    嵌入式C语言里的土豪们之变量类型本文引用地址:http://www.eepw.com.cn/article/184332.htm 上一篇我们谈到了运算奢华大户除法(详见<嵌入式C语言里的土豪们之 ...

  3. c语言sqlist结构体,c语言里 sqlist

    满意答案 cielkong 2018.08.12 采纳率:43%    等级:9 已帮助:463人 c语言里 sqlist?//定义顺序表L的结构体 typedef struct { Elemtype ...

  4. C/C++语言里的near和far是什么意思?

    2019独角兽企业重金招聘Python工程师标准>>> C语言里的near和far是什么意思?-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn ...

  5. C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx

    c语言里求负数补码的总结不足与优点 看C语言编码转换--------负数的二进制表示方法 XX-09-0710:49:17|分类:|标签:|举报|字号订阅 今天在看C语言编码转换时,既然对负数的二进制 ...

  6. Go 语言里怎么正确实现枚举?答案藏着官方的源码里

    在编程领域里,枚举是用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机.拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应. 在刚开始学编程 ...

  7. 聊聊在Go语言里使用继承的翻车经历

    Go不是面向对象的语言,但是使用组合.嵌套和接口可以支持代码的复用和多态.关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出 ...

  8. 把别人的Tcl/Tk代码加入到Go语言里2 矩形

    为什么80%的码农都做不了架构师?>>>    a 从互联网得到的一段tcl/tk代码,把她加入到go语言里 package main import "github.com ...

  9. c语言2 amp 3结果,C语言里23=什么?

    C语言里2&3=什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言里2&3=什么? 这个是按位 ...

  10. c语言里什么叫double,c语言double什么意思

    本文收集整理关于c语言double什么意思的相关议题,使用内容导航快速到达. 内容导航: Q1:在c语言中double是什么意思啊? double是指双精度浮点数类型.float指单精度浮点数类型.它 ...

最新文章

  1. Access-Control-Allow-Origin这个header这个头不能设置通配符域名
  2. 基于 Node.js 平台的web开发框架-----express
  3. 【视频课】图像分割最新内容来了(言有三新录制4部分实例分割算法详解)
  4. ED2k Resource
  5. Object 及toString() 方法的重写
  6. css样式图片、渐变、相关小知识
  7. 设计一个笔记本电脑类,属性随意,并且进行属性私有化,对外提供公开的set和get方法。 设计一个可插拔的接口:InsertDrawable,该接口有什么方法自行定义。
  8. 4.寻找两个正序数组的中位数
  9. python模块介绍二。
  10. Java架构师成长之道之计算机组成原理概述篇
  11. AcWing 棋盘挑战 dsf
  12. 51计数器(理论+实践【代码】)
  13. 抖音昵称html,抖音个性网名带特殊符号 带漂亮符号的抖音昵称
  14. 姿态估计论文汇总 Stacked Hourglass/CPN/Simple Baselines/MSPN/HRNet
  15. 科学家发现孤独感与大脑中的默认网络有关
  16. 软件架构设计师:软件架构风格
  17. uniapp判断当前运行环境 app h5 微信小程序
  18. 软件著作权申请 源代码编辑
  19. Python写个小游戏:蛇棋(下)
  20. Python_django+vue大学生志愿者服务招募网站源代码介绍

热门文章

  1. 网页位置定位-适合导航定位
  2. 学习链接整理——正在进行中
  3. 53.网络安全渗透测试—[文件上传篇3]—[扩展名黑白名单穷举-突破上传]
  4. 那个在阿里养猪的工程师,5年了……
  5. 1663-2016:人工智能发展时间轴
  6. CentOS 7文件目录属性及权限详解
  7. Python 简单的小车绘画
  8. 英语常用日常交际用语
  9. 函数的内部处理及全局变量和局部变量
  10. QMT交易接口账号登录设置