在C(或C ++)中,指针是特殊的,如果它们的值为零:我建议在释放内存后将指针设置为零,因为这意味着再次释放指针并不危险; 当我调用malloc时,如果它无法获取内存,则返回一个值为零的指针; 我一直用if (p != 0)它来确保传递的指针是有效的,等等。
但是,由于内存寻址从0开始,因此有效地址不是0吗?如果是这样的话,0如何用于处理空指针?为什么不是负数而是null?
编辑:
一堆好的答案。我将总结在所表达的答案中所说的内容,因为我自己的思想解释了它,并希望如果我误解,社区将纠正我。
就像编程中的其他一切一样,它是一种抽象。只是一个常量,与地址0并不真正相关.C ++ 0x通过添加关键字来强调这一点nullptr。
它甚至不是地址抽象,它是C标准指定的常量,并且编译器可以将其转换为其他数字,只要它确保它永远不等于“真实”地址,并且如果0不是,则等于其他空指针用于平台的最佳价值。
如果它不是抽象,早期就是这种情况,系统使用地址0,程序员不受限制。
我承认,我的负面数字建议是一个狂热的头脑风暴。对地址使用有符号整数有点浪费,如果它意味着除了空指针(-1或其他)之外,值空间在产生有效地址的正整数和刚刚浪费的负数之间均匀分配。
如果任何数字总是可以由数据类型表示,那么它就是0.(也可能是1。我想的是一位整数,如果是无符号则为0或1,或者只有符号的有符号位,或两位整数,将是[-2,1]。但是你可以只得0为空,1是内存中唯一可访问的字节。)
侃侃无极
摇曳的蔷薇