2016-11-16 43 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)