- 论坛徽章:
- 0
|
空指针究竟指向了内存的哪个地方?
我的一点理解加上刚才做的一个小实验,说出来请大家指点:
1,int * p;
当declare一个指针的时候(非函数指针),我在redhat9自带的gcc上看到的是编译器申请了一个空间,然后赋 $0,我没有明白这个 $0到底是代表了 $0 还是 NULL(in stdio.h)。
2,if(p) if(!p)
if()中出现的只能是逻辑变量,true or false,其实p经历了两次转换(cast):第一次转化为int,第二次转换是 (int)0 == false,
if(p)这样的写法建立在两个假设的基础之上的:第一,NULL宏被定义为 (void*)0,第二,计算机只有0,1,没有true,false,第二个假设就是false用0表示,而不是-1(我记得以前学习的时候遇到过这样的表示法)
3,NULL
NULL表示的逻辑意义并不是 0(指针),而是指向内容不确定(指针) ,
个人觉得,无论规范怎么定义,if( NULL == p)要优于 if(p),后者除了习惯,几十年来c程序员中的习惯(不可否认习惯是程序的一部分),我看不出任何额外的益处。
当然,在林锐的书上这么写,要用 if( p) 而不是 if( NULL == p),面试的时候我也会告诉面试官 if(p),毕竟这样更c style一点。 :em11:
哎。 |
|