我无法理解如何在这里访问char
指针的-1位置。 当我在Turbo C中运行此代码时,它显示输出'f',但在现代编译器中它只显示空间。我无法理解C++中字符指针操作的索引
#include<iostream>
using namespace std;
void main()
{
char *str="hello";
cout<<str[-1]<<endl;
system("pause");
}
我无法理解如何在这里访问char
指针的-1位置。 当我在Turbo C中运行此代码时,它显示输出'f',但在现代编译器中它只显示空间。我无法理解C++中字符指针操作的索引
#include<iostream>
using namespace std;
void main()
{
char *str="hello";
cout<<str[-1]<<endl;
system("pause");
}
数组索引只是为指针运算语法糖,从draft C++ standard部5.2.1
下标:
[...]的表达E1 [E2]是相同的(根据定义)为*(( E1)+(E2))[...]
数组索引开始在0
C++所以你在这里是什么undefined behavior,因为你是在数组边界之外访问按照部分5.7
个加法运算符段落:
[...]如果指针操作数和结果指向相同的数组对象的元素,或一个过去的数组对象的最后一个元素时,既评估不得产生溢出;否则,行为是不确定的。
该行为是严格未定义的。
+1如果你想程序检查这样的错误,使用'std :: string'和'at()' - 那么你会得到一个异常。 –
str[-1]
严格相当于*(str-1)
,你得到的价值大概是无论是在存储之前,指向的地址str
,即使它在技术上是未定义的行为。
数组的索引从** 0 **开始。 – Mahesh