1. 在c语言程序组里面看见 “@far”。问下“@”是什么意思,其什么作用
非标准C的@far 和COSMIC 的 C编译器相关联的
在STM8中,指定地址的长度可以有3种方式,@tiny使用1个字节表示地址,只能寻址地址范围0x00~0xFF;@near使用2个字节表示地址,只能寻址地址范围0x0000~0xFFFF;@far使用3个字节表示地址,寻址地址范围0x000000~0xFFFFFF
2. C语言中,指针的意思是什么FAR指针又是什么
far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1M字节的偏移量。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的段地址为0x7000,偏移量为0x1244,则该指针指向地址0x71224.如果一个far指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。 如果没有指定一个指针是near或far,那么默认是near。所以far指针要显式指定。far指针工作起来要慢一些,因为每次访问一个far指针时,都要将数据段或程序段的数据交换出来。另外,far指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。 什么时候使用far指针? 当使用小代码或小数据存储模式时,不能编译一个有很多代码或数据的程序。因为在64K的一个段中,不能放下所有的代码与数据。为了解决这个问题,需要指定以far函数或far指针来使用这部分的空间(64K以外的空间)。许多库函数就是显式地指定为far函数的形式。far指针通常和farmalloc()这样的内存分配函数一起使用参考资料: http://www.turinger.com/forum_view.asp?forum_id=4&view_id=199 其实你只要记住,指针就是地址,和数组一样,其实你写代码的时候可以先用数组 然后把数组换成指针
3. C/C++中near和far的区别
vc++中有好多这样的类型的,我教你如何自己在vc中查找自己陌生的关键字或类型吧:
1)您在vc环境中的“编辑”子菜单点击“在文件中查找”这个菜单项
2)在“查找什么”编辑框里输入“near”
3)在最下面的“在附加文件夹中查找”中,把目录“X:\VC98\MFC\SRC”(X代表您安装vc6.0的盘符)添加进来,目的是让系统除了查找默认的目录外,还查找这个目录里的文件有没有你要找的东西,然后点击“查找”按钮
4)注意“查找对话框”关闭后,系统会在代码编辑框下面的输出框中显示查到的匹配项
5)里面可能会有好多的匹配项,您随便找到一个“near”的匹配项后双击这一行
6)注意代码编辑框会跳到您刚才双击的那个文件中,同时定位到那个“near”,第一次查找应该并不是有关“near”的详细定义,而是这个文件里用到了“near”,您需要鼠标右键这个“near”,在弹出子菜单中选择“转到near的定义”
7)经过以上的步骤,最终定位到了您要查找的这个“near”的文件及准确定义
P.S. 1)near、far在X:\VC98\Include\WINDEF.H文件中被定义为#define near
#define far,也就是什么都没定义
2)在vc中有很多这样只起表示而没有实际内容的宏定义的,它们的作用是让vc编译器来判别的,所以在很多情况下,建议您写代码时还是要加上这些空定义的宏,否则编译器会报错。
3)near、far、huge在C++里我没学到过这样的关键字或类型定义,您应该说的是VC吧!
4)VC是微软给程序员用来写WINDOWS的应用程序的,所以VC中的编译器,预处理器等微软都是加了很多其它编译器没有的东西的,譬如支持微软自己的宏定义,其它编译器无法识别的,加了微软的宏定义,只是想让程序尽可能少出错,进行必要的检查。所以作为语言规范,C++本身好像并没有near、far、huge这些东西吧,C++在UNIX里好像从来没用过near、far、huge吧。相反大公司为了支持UNIX编程,也加了很多微软没有的概念在它们自己的编程环境中。
5)关于\VC98\MFC\SRC里是微软给的许多源代码文件,所以在查找您要的东西时,把这个目录包含进来,尽管最终您要找的东西也许不会在这个目录里,但通过您让VC系统查找这个目录后,在很多情况下才能最终定位到您要的那个文件。而且,您有时间有兴趣最好了解下这个目录里的源代码文件,很有用的。
6)在查找您要的东西前,您可能没有编译过原来在vc中打开的源代码,所以当查找到我所说的第六步是会弹出“提示框”,直接点确定要编译就行了,等编译完,自动会进入第六步。
4. FAR的C语言
far: 远指针
在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。
near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。
far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1M字节的偏移量。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的段地址为0x7000,偏移量为0x1224,则该指针指向地址0x71224.如果一个far指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。
如果没有指定一个指针是near或far,那么默认是near。所以far指针要显式指定。far指针工作起来要慢一些,因为每次访问一个far指针时,都要将数据段或程序段的数据交换出来。另外,far指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。
什么时候使用far指针?
当使用小代码或小数据存储模式时,不能编译一个有很多代码或数据的程序。因为在64K的一个段中,不能放下所有的代码与数据。为了解决这个问题,需要指定以far函数或far指针来使用这部分的空间(64K以外的空间)。许多库函数就是显式地指定为far函数的形式。far指针通常和farmalloc()这样的内存分配函数一起使用
5. C语言中函数前面的far是什么意思
如果学过汇编应该知道近指针和远指针,far就是表示远指针,其实还有关键字near,near表示16位寻址,指针长度16位,far表示20位寻址,指针长度20位。在32位系统中,内存管理为4G平坦模式,统一用32位指针,因此far和near仅仅是兼容的需要。不少编译器都直接这样定义:
#define far
#define near
6. 请问C语言中 char far 是什么意思
near指针和far指针?
在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。
near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。
far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1M字节的偏移量。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的段地址为0x7000,偏移量为0x1244,则该指针指向地址0x71224.如果一个far指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。
如果没有指定一个指针是near或far,那么默认是near。所以far指针要显式指定。far指针工作起来要慢一些,因为每次访问一个far指针时,都要将数据段或程序段的数据交换出来。另外,far指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。
什么时候使用far指针?
当使用小代码或小数据存储模式时,不能编译一个有很多代码或数据的程序。因为在64K的一个段中,不能放下所有的代码与数据。为了解决这个问题,需要指定以far函数或far指针来使用这部分的空间(64K以外的空间)。许多库函数就是显式地指定为far函数的形式。far指针通常和farmalloc()这样的内存分配函数一起使用
7. C++中的FAR是什么意思
一般被称作指针运算符,又叫反向取址运算符,与&作用相反 指针,其实就是一个变量,只是它的值是另一个变量或是常量的地址罢了,而*的作用便是把这个地址所存放的值取出
8. C/C++中的far关键字是什么意思
far是WINDOW3.2的前的产物,也就是说是在大的寻址区做16位编程时所用到的,在WIN32平台下这个关键字已不再需要,因为已经统一为FAR型了,无论你加还是不加.
9. 在C语言中,“far”是在哪种情况下使用的
int far 或者 void far 表示要编译器给声明的这些量分配在 远处的存储器(RAM)中,即分配到 64K 以外的 存储地址中。
64K 作为一个“段”(Segment),是 PC 机 80x86 时期的老概念。超过64K 就是 “远”, FAR 就是 “远”de 英文。
编译器对near(近)和far(远)的处理略有不同。
新的编译器默认应当是远。
10. 我在查c语言图形库函数时,原形里含有的“far”表示什么意思
哈哈 想了半天才想起来far是和near对应的,就是一般程序的函数调用都在64k地址范围内的,就是16位寻址就够了,但是当代码比较庞大时,16位就可能不够了.far就代表32位寻址,函数的本质就是个地址,指针的本质也是个地址,所以就有了寻址的问题,为了确认我还搜了一下呵呵 参见指针的:)
<P> 8、near指针和far指针<BR>在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。<BR>near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。<BR>far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1M字节的偏移量。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的段地址为0x7000,偏移量为0x1244,则该指针指向地址0x71224.如果一个far指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。
如果没有指定一个指针是near或far,那么默认是near。所以far指针要显式指定。far指针工作起来要慢一些,因为每次访问一个far指针时,都要将数据段或程序段的数据交换出来。另外,far指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。