C++ C++-1索引是否具有最后一个索引元素的值?嗯?

C++ C++-1索引是否具有最后一个索引元素的值?嗯?,c++,gcc,read-eval-print-loop,C++,Gcc,Read Eval Print Loop,你能解释一下这里发生了什么吗 对我来说,-1索引最后一个元素5是个谜 我知道len-1对于for循环是正确的,但我想知道它如何旋转阵列 #include <iostream> using namespace std; int main() { int a[5]={1,2,3,4,5}; int len = sizeof(a)/sizeof(a[0]); for(int i=len;i>=0;i--) { a[i

你能解释一下这里发生了什么吗

对我来说,-1索引最后一个元素5是个谜

我知道len-1对于for循环是正确的,但我想知道它如何旋转阵列

#include <iostream>
using namespace std;

int main()
    {
    int a[5]={1,2,3,4,5};
    int len = sizeof(a)/sizeof(a[0]);

    for(int i=len;i>=0;i--)
        {
        a[i]=a[i-1]; 
        }

    for(int i = 0;i<len;i++)
        {
        cout<<a[i]<<" ";
        }
    return 0;
    }
int len=sizeof(a)/sizeof(a[0])将为您提供
5
。然后你为(inti=len;i>=0;i--){a[i]=a[i-1];
-这意味着你做了
a[5]
-但是
5
不是一个有效的索引,只有[0-4]是有效的。所以你访问了越界,这就是说,任何事情都可能发生


顺便说一句,为什么不使用?

你从I开始,len的值是5。这是错误的。你的最大索引位置是len-1(4)。所以你的第一个循环看起来是错误的。如果是这样的话,那基本上是巧合。两端都有未定义的行为。
a[5]=a[4];
a[0]=a[-1]
是关于数组的越界访问,如果将其他元素作为最后一个元素,您将看到它不是5的来源。