在数组中向后计数。[-1]

Tol*_*ga 0 c++ arrays c++17

当我想改变数组的最后一个元素时,我总是使用[-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 ++有不同的条件吗?

Som*_*ken 6

你的老师是对的。使用来访问数组arr[-1]是未定义的行为,这对您的代码来说是不正常的,很糟糕。C ++中的C样式数组不具备-1Python所具有的功能。

对于C样式数组,您确实必须对arr[9]最后一个元素进行处理。但是对于C ++样式数组(std::array),可以使用size() - 1rbegin()back()