问题描述
你能告诉我这里发生什么事吗?
-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;
}
输出:
5 1 2 3 4
解决方法
int len = sizeof(a)/sizeof(a[0]);
将给您5
。然后您执行for(int i=len;i>=0;i--){ a[i]=a[i-1];
-这意味着您执行a[5]
-但是5
不是有效的索引,只有[0-4]有效。因此,您访问的范围是Undefined Behaviour,因此任何事情都可能发生。
顺便说一句;为什么不使用std::size?