以下是引用同生缘在2011-1-29 14:55:43的发言:
如果指向 一个未知的位置 有 风险 的吧 ,有朋友说:。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
要是想深入了解栈,估计要看操作系统、编译器相关的书籍了。
满肯定有满的情况,不过貌似现在都处理好了,要么提示你非法访问,要么有虚拟内存映射栈空间,
所以在现在应该不会遇到这种情况了吧!
不像以前,内存小的可怜,一不小心就用满了。
C语言很有意思,它的很多概念是“自满”(自圆其说)的。按照楼主的说法,那么链表中的指针,其危险性不是更大了么?假设有一个单向非循环链表,最后一个节点的next域值为NULL,链表首地址为ipHead,而下面的函数打算遍历链表,并输出数据域的内容,
但不处理最后一个节点:
typedef struct LINK
{
int data;
struct LINK *next;
}LINK;
void showLink(LINK *ipHead)
{
for(; ipHead && ipHead->next; ipHead = ipHead->next)
;//在这里输出ipHead->data
}
关键是:
for(;
ipHead && ipHead->next; ipHead = ipHead->next)划下划线的部分。
我想表达的问题是,按理说如果当前链表是“空链”,其初始的ipHead的值即为NULL,那么ipHead && ipHead->next这个条件判断中的ipHead->next就已经犯了严重错误了!
但事情不是这样的,这个表达式“很安全”,这全都归功于“短路运算”(若不清楚,请百度)。其实,这个问题是“短路运算”之所以能存在的意义所在。
结论:只要我们的程序能够做到“自满”,或者说,我们所提供的程序在逻辑上能够完满,那么,出现“空指针”并不是可怕的事情。关键的逻辑要严谨。
[
本帖最后由 犬虫门心 于 2011-1-29 15:14 编辑 ]