2014-03-06 26 views
2

我无法理解如何在这里访问char指针的-1位置。 当我在Turbo C中运行此代码时,它显示输出'f',但在现代编译器中它只显示空间。我无法理解C++中字符指针操作的索引

#include<iostream> 
using namespace std; 

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

    system("pause"); 
} 
+0

数组的索引从** 0 **开始。 – Mahesh

回答

2

数组索引只是为指针运算语法糖,从draft C++ standard5.2.1下标

[...]的表达E1 [E2]是相同的(根据定义)为*(( E1)+(E2))[...]

数组索引开始在0 C++所以你在这里是什么undefined behavior,因为你是在数组边界之外访问按照部分5.7加法运算符段落:

[...]如果指针操作数和结果指向相同的数组对象的元素,或一个过去的数组对象的最后一个元素时,既评估不得产生溢出;否则,行为是不确定的。

3

该行为是严格未定义的。

+1

+1如果你想程序检查这样的错误,使用'std :: string'和'at()' - 那么你会得到一个异常。 –

1

str[-1]严格相当于*(str-1),你得到的价值大概是无论是在存储之前,指向的地址str,即使它在技术上是未定义的行为。