【问题标题】:I am not able to understand indexing of char pointer operation in c++我无法理解 C++ 中 char 指针操作的索引
【发布时间】:2023-03-09 03:05:01
【问题描述】:

我无法理解如何在此处访问 char 指针的 -1 位置。 当我在 Turbo C 中运行此代码时,它显示输出“f”,但在现代编译器中它只显示空格。

#include<iostream>
using namespace std;

void main()
{
    char *str="hello";
    cout<<str[-1]<<endl;

    system("pause");
}

【问题讨论】:

  • 数组的索引从0开始。

标签: c++ pointers char


【解决方案1】:

行为是严格未定义的。

【讨论】:

  • +1 如果您希望程序检查此类错误,请使用std::stringat() - 然后您会得到一个异常。
【解决方案2】:

数组索引只是指针算术的语法糖,来自draft C++ standard 部分5.2.1 下标

[...]表达式 E1[E2] 与 *((E1)+(E2))[...] 相同(根据定义)

数组索引在 C++ 中从 0 开始,所以您在这里拥有的是 undefined behavior,因为您按照 5.7 部分访问数组边界之外的内容 加法运算符5段:

[...]如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为未定义。

【讨论】:

    【解决方案3】:

    str[-1] 严格等同于*(str-1),你得到的值可能是内存中str 指向的地址之前的任何值,即使它在技术上是未定义的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多