这就是我所拥有的,它造成了一些非常奇怪的差异。
#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号一起工作?
答案 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)