免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2282 | 回复: 6

真有机器用非零空指针吗, 或者不同类型用不同的表达? [复制链接]

论坛徽章:
0
发表于 2007-05-31 10:18 |显示全部楼层
前两天这里对NULL进行了一次比较激烈的讨论,正好今天看到了这篇文章,就贴出来给大家看看。

  说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达?
  至少PL/I, Prime 50 系列用段07777, 偏移0 作为空指针。后来的型号使用段0, 偏移0 作为C 的空指针, 迫使类似TCNP (测试C 空指针) 的指令明显地成了现成的作出错误猜想的蹩脚C 代码。旧些的按字寻址的Prime 机器同样因为要求字节指针(char *) 比字指针(int *) 长而臭名昭著。
  Data General 的Eclipse MV 系列支持三种结构的指针格式(字、字节和比特指针), C 编译器使用了其中之二:char * 和void * 使用字节指针, 而其它的使用字指针。
  某些Honeywell-Bull 大型机使用比特模式06000 作为(内部的) 空指针。
  CDC Cyber 180 系列使用包含环(ring), 段和位移的48 位指针。多数用户(在环11 上) 使用的空指针为0xB00000000000。在旧的1 次补码的CDC 机器上用全1 表示各种数据, 包括非法指针, 是十分常见的事情。
旧的HP 3000 系列对字节地址和字地址使用不同的寻址模式; 正如上面的机器一样, 它因此也使用不同的形式表达char * 和void * 型指针及其它指针。
  Symbolics Lisp 机器是一种标签结构, 它甚至没有传统的数字指针; 它使用<NIL, 0> 对(通常是不存在的<对象, 偏移> 句柄) 作为C 空指针。
  根据使用的“内存模式”, 8086 系列处理器(PC 兼容机) 可能使用16 位的数据指针和32 位的函数指针, 或者相反。
  一些64 位的Cray 机器在一个字的低48 位表示int *; char * 使用高16 位的某些位表示一个字节在一个字中的偏移。

论坛徽章:
0
发表于 2007-05-31 10:25 |显示全部楼层
c標準規定空指針是0,你可以用0來賦值,比較。
但0不代表每一個bit都是0。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-05-31 11:34 |显示全部楼层
原帖由 Sorehead 于 2007-5-31 10:18 发表
前两天这里对NULL进行了一次比较激烈的讨论,正好今天看到了这篇文章,就贴出来给大家看看。

  说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达?
  至少PL/I, Prime 50 系列用段07777, 偏移0 ...


转贴/翻译最好注明出处!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-05-31 11:36 |显示全部楼层
原帖由 福瑞哈哥 于 2007-5-31 10:25 发表
c標準規定空指針是0,你可以用0來賦值,比較。
但0不代表每一個bit都是0。

强烈建议看看 comp.lang.c FAQ 的 5. Null Pointers:
http://www.c-faq.com/null/index.html

论坛徽章:
0
发表于 2007-05-31 11:44 |显示全部楼层
原帖由 MMMIX 于 2007-5-31 11:34 发表


转贴/翻译最好注明出处!

同意,好几次有人很完整地把我的整个文章转了去,每一个细节都注明了,就连“[原创]”都没落下,仅仅少了注明是转帖的和原文出处和原作者名。

论坛徽章:
0
发表于 2007-05-31 19:57 |显示全部楼层
原帖由 林杰杰 于 2007-5-31 11:44 发表

同意,好几次有人很完整地把我的整个文章转了去,每一个细节都注明了,就连“[原创]”都没落下,仅仅少了注明是转帖的和原文出处和原作者名。

这种情况在中国是非常非常常见的!

论坛徽章:
0
发表于 2007-06-01 10:20 |显示全部楼层
呵呵,那我先对自己这个不好的态度认个错了。

文章来自与Steve Summit写的《C–FAQ》(2004 年7 月3 日修订版)的中文翻译版《C语言常见问题集》,朱群英, 孙云翻译。
5.14节
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP