【发布时间】:2014-07-08 22:19:20
【问题描述】:
从字面上看,(char *) 0 是指指向某个包含零的位置的指针吗?系统是否为每个这样的声明创建一个值为 0 的地址?
【问题讨论】:
-
您可以创建指向您想要的任何内存位的指针,只需指定该内存地址 - 毕竟,内存是“线性的”并且每个字节都是可直接寻址的。这样做毫无用处,因为通常您不知道数据的实际位置,并且指向随机内存地址是使您的应用程序和/或计算机崩溃的好方法。
-
@MarcB:这不是
(char *)0所做的......它是一个空指针,它不一定有地址零(尽管它通常有)。在这里使用字面量0有特殊含义……例如它与(char *) 1 - 1不一样。 -
顺便说一句,内存不一定是线性的。
-
操作系统在地址
0(空指针)处可能有也可能没有'\0'(空字符)。 C 程序不能取消引用空指针。所以从 C 的角度来看,地址 0 的值是不可知的。 -
@chux 好吧,从严格的角度来看,任何特定编号地址的值都是不可知的。 (无论如何,地址可能与数字不对应)。地址零在这方面并不特殊,只是您可能必须通过指向地址
1并递减来到达它!