2016-11-16 9 views
-2

これは私が持っているものであり、それはいくつかの非常に奇妙な矛盾を引き起こしています。値渡しでも変数を変更する機能はありますか?

#include<iostream> 
using namespace std; 

void input_data(int data[], short size); 

int main(){ 
short size; 
int data[1000]; 

cout << "How many values would you like to store? "; 
cin >> size; 

while (size > 0){ 
cout << "Enter your " << size << " values:" << endl; 
input_data(&data[1000], size); 
cout << size << " values stored in array." << endl; 
} 
} 

void input_data(int data[], short size) 
{ 
    int i; 
    for (i=0;i<size;i++){ 
     cin >> data[i]; 
    } 
} 

ので、このコードはかなりまっすぐ進むべきであるが、任意の時間は、私がsizeのための3以外の値を入力し、ラインcout << size << " values stored in array." << endl;は言って終わる「0の値は、配列に格納さ。」

input_datasizeの値をどのように変更することができないのかよく分かりませんが、参考値ではなく値渡ししています。

はなぜでしょう、そして、より良いまだ、なぜそれが数3で作業しているのですか?

+2

これについて考える: '&data [1000]'。 – juanchopanza

+0

'input_data(&data [1000]、size);'私はこれがあなたが思うとは思わないと思います。あなたはあなたの本をもっと慎重に読むべきです。 –

+0

*いいえはありません「私は唯一の参照によって配列を渡すよ」*私だけではない 'size'、参照によって配列を渡しているので、私はあなたが – greatj0b

答えて

1

あなたは、スタックを上書きしています。

まず、あなたは、配列を取る関数宣言:

void input_data(int data[], short size); 

をそして、あなたはそれを呼び出します。代わりに、このような配列の最初の要素へのポインタを渡す:

input_data(data, size); 
input_data(&data[0], size); 

あなたはすぐに(サイズを含む多くのものを含んでいる)配列の後にスペースへのポインタを渡している。

input_data(&data[1000], size); 

data&data[0]のパラメータは本質的に同じですが、&data[1000]は全く別のものを指しています - アレイには1000個の要素(0〜999)しかないため、配列に存在しないdata[1000]のアドレスを指しています

関連する問題