今天看到一篇Blog:《NULL指标两三事》,文中谈的主题即是我这篇Blog的题目,我这里也只是对原文的做些简单的记录。

文中谈到的问题,也是我们平常出现的问题,即在操作一个指针前,我们常常在不需要判断指针是否为NULL时做了判断,而在需要判断时却想当然地把它漏掉了。

例如:delete时,完全可以对一个NULL指针进行操作,而我们却要多余地加上一个if(ptr!=NULL)判断; 又如:strlen时,如果参数给了一个NULL指针,就可能造成整个程序崩掉,我们却以为strlen自己会做NULL指针判读,并在获得一个NULL参数时return。

另外,在原文的评论栏中有一问一答,合理地解释了为什么strlen这样的接受指针参数的函数,会不做if(NULL==ptr)return;这样的操作。嗯,为了效率,这么做充分体验了C的精神。想像一下,对于一个错误的参数,检测函数的返回难道比在调用前就检测参数更省事么;何况如果同一个参数穿过层层的函数调用,一个个检测函数返回是多么可怕的事,不如在调用函数事先来个参数检测。实际上,像strlen这样的函数,也不是没有在函数内部做参数检测,只不过它用的是非常合理的assert断言机制,即满足了功能,又满足了效率。

以后再操作指针时,要记得有这么回事~