【问题标题】:What does char pointer zero mean?char 指针零是什么意思?
【发布时间】:2014-07-08 22:19:20
【问题描述】:

从字面上看,(char *) 0 是指指向某个包含零的位置的指针吗?系统是否为每个这样的声明创建一个值为 0 的地址?

【问题讨论】:

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

标签: c pointers


【解决方案1】:

不,这是 0 的演员表输入 char *。也就是说,一个空指针。任何指针上下文中的0 指的是空指针常量

它究竟指向什么并不重要 - 取消引用它会导致未定义的行为。

更多信息,请查看C FAQ Part 5: Null Pointers

【讨论】:

  • @DietrichEpp,我熟悉空指针的工作原理;它在逻辑上根本不是一个指针。编辑澄清。
  • “它到底指向什么并不重要”。实际上,它无处指向每个定义。一些编译器有一个扩展,允许以其他方式读取内存位置 0,例如使用易失性空指针或类似的标记。
  • @Deduplicator 这正是它指向的 what 和它指向的 where 之间的区别。后者可能有意义,但前者肯定没有。
  • @Deduplicator 或者他们只允许取消引用空指针以访问地址 0,并且不要让它陷入困境。
  • @MattMcNabb:现代编译器没有这样做是有充分理由的:它消除了大量的优化可能性,这意味着它们产生的代码比竞争对手大得多、速度慢得多,因此它们很快就会被遗忘,或者它们改过自新。
【解决方案2】:

它是char * 类型的空指针值。

来自 C++ 标准

空指针常量可以转换为指针类型;结果 是该类型的空指针值

来自 C 标准

3 一个值为 0 的整数常量表达式,或者这样的 表达式转换为 void * 类型,称为空指针常量。66) 如果将空指针常量转换为指针类型,则 结果指针,称为空指针,保证比较 不等于指向任何对象或函数的指针。

4 将空指针转换为另一种指针类型会产生 空指针 该类型的指针。任何两个空指针应该比较相等。

它不是指向包含 0 的位置的指针。所以系统什么也不创建。正如在 C 标准中所写的那样,空指针“保证不等于指向任何对象或函数的指针”。所以用来判断一个指针是否指向某个对象或函数。

【讨论】:

    【解决方案3】:

    它是对空指针的显式强制转换。我相信有一个#define 宏允许你只写NULL

    【讨论】:

    • 如果有人看到这个。有人可以解释为什么我为此获得了 +8 代表吗?
    • 是的,赞成票+10,反对票-2,因此这个问题的“+8”。
    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2011-01-27
    • 2012-11-02
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多