仓鼠爱跑圈 发表于 2018-7-25 22:44:13

while(p)和while(p!=NULL)一样吗

如题

感谢各位大神指导!

仓鼠爱跑圈 发表于 2018-7-25 22:47:20

是不是前者存在 p指向0x00的情况?然后导致程序误判为空?

新元人 发表于 2018-7-25 23:21:43

在创建一个p时,没有写p=NULL的话,p会有个随机的值,
int main()
{
        int a;
        int *p;
        p=(int*)0x00;
        //p=&a;
        while(p!=NULL)
        {
                printf("<<<<<<<<<<<<<<<<<<<<");
        }
}
这个代码说明
p=0x00跟p=NULL;等价

ba21 发表于 2018-7-25 23:24:40


是一样。
一模一样的意思。

        int *p=NULL; // 就意味着p == 0x00

写代码调试一下什么都清楚了。

TyCk 发表于 2018-7-26 00:57:26

看下NULL的定义的话,你可能就理解了:
#define NULL (void*)0
所以呢,其实,NULL是个宏定义,是一个指向地址0的通用指针,小甲鱼课堂上专门讲到过的。{:10_256:}

TyCk 发表于 2018-7-26 01:02:36

哦,还有个问题,上条回复被审核了,只能再来一楼了。
你这个while(p)和 while(p!= NULL),从可读性的角度来说,前提是p要是个指针,然后与NULL比较才有意义,因为NULL实际是个指向0x0000的通用指针,否则一个整数和NULL比较,虽说或许能执行,但有点费解了就。
那么,如果是指针的话,只要p的值不为0.while语句就会执行,NULL的值也等同于0,所以其实是一样的啦。

仓鼠爱跑圈 发表于 2018-7-26 07:39:28

因为二级题库判我错了,下次写全吧,谢谢各位。

仓鼠爱跑圈 发表于 2018-7-26 10:49:31

TyCk 发表于 2018-7-26 00:57
看下NULL的定义的话,你可能就理解了:

所以呢,其实,NULL是个宏定义,是一个指向地址0的通用指针,小 ...

sorry不小心点成了扣分 给你加回来
页: [1]
查看完整版本: while(p)和while(p!=NULL)一样吗