以下のコードでは、temp変数に配列0のインデックスを格納しようとしています。このコード行では、a[i-1]=a[i]-a[i-1];
i = 0の場合、a [i-1]は[-1]になります。変数の値の変更
- なぜコンパイラはエラーを起こさないのですか?
- なぜ、i = 0でtempが他の場所で使用されていない場合でも、temp変数の値は影響を受け、最初の反復後にゼロになります。たとえば、
私のように入力を与えたとき、:
3 1 2 3
出力:
i:0
a[0]: 1
TEMP: 1
TEMP: 0
TEMP: 0
TEMP: 0
実際に何が起きているのでしょうか?コンパイラの動作を参照して説明してください。私は条件を入れれば、if(i!=0) a[i-1]=a[i]-a[i-1];
というコードが正常に動作することを知っています。しかし、なぜ私はこのシナリオで起こっているのか知りたい。なぜコンパイラがエラーを与えていない
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10],i,n,temp;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
if(i==0){
temp=a[i];
cout<<"i: "<<i<<endl;
cout<<"a[0]: "<<a[i]<<endl;
}
cout<<"TEMP: "<<temp<<endl;
a[i-1]=a[i]-a[i-1];
}
cout<<endl<<"TEMP: "<<temp;
}
[未定義の動作](http://en.cppreference.com/w/cpp/language/ub) – 101010
[i-1]は最初の繰り返しで範囲外です –