- 论坛徽章:
- 0
|
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)。
我从来没有看见过一个严谨的说明是将定义单独给出,而将前提条件在例子中给出。按照这样的定义形式,我只能认为可变参数这个条件是一个例子,而不是一个定义的必要条件。
为避免小弟以后再概念不清,也请知道的人给我一个准确的答案,小弟在这里谢谢先 |
|