当我想改变数组的最后一个元素时,我总是使用[-1]作为最后一个元素。
#include <iostream>
using namespace std;
int main(){
int arr[10]{};
arr[0]=10;
arr[-1]=100;
cout<<arr[-1]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我的老师说:“ C ++不支持数组的这种行为。我应该使用arr [9]作为最后一个元素,而“ arr [-1] = 100”实际上将在其中一个元素之前的区域中存储1000。数组开始。这会导致崩溃,因为该值超出了数组的范围。” 有人可以解释为什么吗?
注意:我是python程序员。当我在列表中使用-1时,我在python中没有问题。C ++有不同的条件吗?
你的老师是对的。使用来访问数组arr[-1]是未定义的行为,这对您的代码来说是不正常的,很糟糕。C ++中的C样式数组不具备-1Python所具有的功能。
对于C样式数组,您确实必须对arr[9]最后一个元素进行处理。但是对于C ++样式数组(std::array),可以使用size() - 1或rbegin()或back()。