黑马程序员技术交流社区

标题: 当指针为空时,我们是用让他指向0,还是指向NULL啊 。?? [打印本页]

作者: 侯金龙    时间: 2014-4-28 22:39
标题: 当指针为空时,我们是用让他指向0,还是指向NULL啊 。??
本帖最后由 侯金龙 于 2014-5-4 14:44 编辑

这个和编译平台是不是有关,32位和64位的是不是也不一样,谁能给个详解

作者: NenKeer    时间: 2014-4-28 22:41
NULL是宏定义,实际就是0吧
作者: 执着的土豆    时间: 2014-4-28 22:44
本帖最后由 执着的土豆 于 2014-4-28 23:06 编辑

这个好像不同的语言中,会有所不同。我刚才又查了一下,仅供参考:
c里面可以直接赋值0,32位。64位倒是没区别,都一样,因为指针里面存放的就是个内存地址。c里面给0,oc老师视频中讲是null。   null 通常用来表示 一个不指向任何对象的指针,其实就是0(其类型可以是int,也可以是long)。c语言中的null通常定义为(void *)0。
在有些语言中不正确,例如C++中,null的类型必须是个整数类型,否则无法将null赋给一个指针,因为c++并没有定义从void *到任何其他类型的自动转型操作。

作者: peku    时间: 2014-4-29 08:22
本帖最后由 peku 于 2014-4-29 08:24 编辑

定义*p=地址值(是个整数值)
首先你对指针的理解有偏差,将p赋值为0或者NULL其实并不是将p指向0这个数字或者NULL,我们知道内存地址都是通过整数来表示的,这里就相当于ASCll码的原理(比如我们赋值char c=56,我们可以通过这个数字表示的字符来打印这个字符),利用了数字的表示特性,当给p赋一个整数时,变量p里面存放的就是一个整数值,然后我们将这个整数值对应于一个地址去找这个地址上对应的值。比如*p=1111,当利用指针索取其指向的值时,计算机就会去找这个1111的地址,然后取出这个地址上的值。那么这里将指针赋值为0或者NULL时,这个地址上是没有存放任何数据的(系统规定),所以就表示不指向任何值。
作者: gaoxinglei123    时间: 2014-4-29 10:32
c语言中都一样的把




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2