2016-11-16 42 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]; 
    } 
} 

所以這個代碼應該是相當直接的,但任何時候我進入比3 size以外的值,該行cout << size << " values stored in array." << endl;結束說:「存儲在陣列0值。」

我不明白可能會如何更改size的值,因爲我是通過值傳遞的,而不是通過引用。

爲什麼會發生這種情況,更好的是,爲什麼它會與數字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); 

你傳入的指針空間立即陣列AFTER(其中包括許多事情,包括大小)::

input_data(&data[1000], size); 

代替指針傳遞到所述陣列的這樣的第一個元素的雖然data&data[0]的參數基本上相同,&data[1000]點到一個完全不同的東西 - 它指向的data[1000]不陣列中存在的地址,因爲該陣列只具有1000個元素(從0到999)