函数更改变量,即使通过值传递?

时间:2016-11-16 23:47:28

标签: c++

这就是我所拥有的,它造成了一些非常奇怪的差异。

#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_data如何更改size的值,因为我通过值传递,而不是通过引用。

为什么会发生这种情况,更好的是,为什么它与3号一起工作?

1 个答案:

答案 0 :(得分: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]指向一个完全不同的东西 - 它指的是data[1000]的地址存在于数组中,因为该数组只有1000个元素(从0到999)