免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: ljttlf
打印 上一主题 下一主题

null 指针的使用 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-09-19 02:36 |只看该作者

null 指针的使用

我必须承认我一个错误,我在最开始的例子里面,我将c++里面定义NULL的方式放在了这里,c和c++是不一样的,我的疏忽,记错了。

但是在function call context 下面,win_hate帮主说如果用0 的话,还是不需要转换的话,我认为帮主这句话是错误的。因为状态已经迁移了。大家讨论,认为是我错了,我也会向帮主道歉。

我语文不好,怕又说不清楚,我将前面的一些话修改了下,做了些补充。

论坛徽章:
0
22 [报告]
发表于 2004-09-20 09:46 |只看该作者

null 指针的使用

一般来讲,0 和 NULL不同。不要用0 去替代NULL

NULL是 (void*)0,  
0是 integer 0,

两者的长度都可能不一样。长度相同在有些机器上是巧合。
linux i386   都是4
TC i286 大模式下, 0 长度是2, (void*)0长度是 4。
等等。

论坛徽章:
0
23 [报告]
发表于 2004-09-20 10:51 |只看该作者

null 指针的使用

思一克 兄,不好意思,已开始我把c和c++的记反了,这个是我的失误,所以我和帮主后面讨论的是数字0在foo(char *,int *)这样的函数里面能不能被编译器认作指针0(当然仅仅是基于faq上面的说法,因为现在很多编译器修正了这个经常出现的问题)。

但是随着讨论的深入,我和帮主的焦点已经变成:

1 foo(char *,int *)这样的函数调用是属于point context还是function call context,或者是两个状态的交集?

2 在point context,编译器会认识数字0,并将其转换成指针0,那我的疑问是,按照faq的说法,“To generate a null pointer in a function call context, an explicit cast may be required, to force the 0 to be recognized as a pointer”,它并没有说function call context也需要满足帮主的条件,比如参数个数固定,前面有声明 等等,此时,编译器也能认识数字0作为指针0吗?

3 不知道是faq的失误还是我自己理解有误,我在faq里面看的参数可变等条件是在例子中出现的:For example, the Unix system call execl takes a variable-length, null-pointer-terminated list of character pointer arguments, and is correctly called like this: execl("/bin/sh", "sh", "-c", "date", (char *)0)。
我从来没有看见过一个严谨的说明是将定义单独给出,而将前提条件在例子中给出。按照这样的定义形式,我只能认为可变参数这个条件是一个例子,而不是一个定义的必要条件。

为避免小弟以后再概念不清,也请知道的人给我一个准确的答案,小弟在这里谢谢先

论坛徽章:
0
24 [报告]
发表于 2004-09-20 10:57 |只看该作者

null 指针的使用

ljttlf你好: 我并没有详细看前面的帖子,仅仅发表我的一点观点而已。

论坛徽章:
0
25 [报告]
发表于 2004-09-20 11:02 |只看该作者

null 指针的使用

思一克  我真是失败,刚开始的时候记反了,呵呵。
不知道为什么我的想法和大家的不一样?我以后还是少在bbs上留言开腔的好,可能现在很多人把我当刺头呢

论坛徽章:
0
26 [报告]
发表于 2004-09-20 11:05 |只看该作者

null 指针的使用

什么记反了?
不要那样说吗。发言多好,可以讨论呀

论坛徽章:
0
27 [报告]
发表于 2004-09-20 11:08 |只看该作者

null 指针的使用

把null=0记成c里面的了,应该是c++里面的。
呵呵,我有事请先下了,祝你今天在cu上面愉快。

论坛徽章:
0
28 [报告]
发表于 2004-09-20 19:33 |只看该作者

null 指针的使用

to ljttlf:

5.2 才多长,劳驾您自己看看清楚好吗? 你的所谓焦点或疑问在里头说得很清楚。其实你我都清楚,就请别再....好吗? 要我把 5.2 的最后部分贴出来吗?

错了不要紧,别太在意面子了。 whyglinux 兄在以前的帖子里曾说 "人非圣贤,孰能无过"。我要说,只要你潜水,就可确保无错,但潜水----是大过!

与大家一起讨论,是好事。错了没有什么大不了的,我以前与一位叫 fireyfox 朋友讨论 scope 的时候错过,在与 flw 兄讨论 const 的时候也错过。有错而掩饰是没有用的,只能使得菜鸟糊涂,被老鸟耻笑。

希望你能放下面子,以一种轻松的心态与大家讨论!欢迎!

论坛徽章:
0
29 [报告]
发表于 2004-09-21 11:12 |只看该作者

null 指针的使用

呵呵,说的好,谁没有错呢?
谢谢帮主 ! 看来我还要回去好好补补c的基本功了.努力为广大cu服务

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
30 [报告]
发表于 2004-09-21 20:28 |只看该作者

null 指针的使用

BBS 上,还请慎言。

因为你的一句话,随时会被别的新手们当作是圣经(尽管这种“当作”本身也是不可取的),所以,为了不误导别人,还是要做到:

1,不要以为自己语文不好,就可以不把话说清楚或者说错;
2,对自己本身就没有搞得很清楚的内容,最好不要发肯定性的言论;
3,出了错误及时更正。

以上,to 所有高手们。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP