C++ 函数更改变量,即使按值传递?
这就是我所拥有的,它导致了一些非常奇怪的差异C++ 函数更改变量,即使按值传递?,c++,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
#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];
}
}
#包括
使用名称空间std;
无效输入_数据(整数数据[],短尺寸);
int main(){
短尺寸;
整数数据[1000];
大小;
而(大小>0){
cout您正在覆盖堆栈
首先声明一个接受数组的函数:
void input_data(int data[], short size);
然后调用它,而不是像这样将指针传递给数组的第一个元素:
input_data(data, size);
input_data(&data[0], size);
您正在传递一个指向数组后面的空间的指针(其中包括许多内容,包括大小):
虽然data
和&data[0]
的参数本质上是相同的,&data[1000]
指向一个完全不同的东西-它指向data[1000]
的地址,该地址在数组中不存在,因为数组只有1000个元素(从0到999)想想看:&data[1000]
input_data(&data[1000],size);
我认为这并不像你认为的那样。你应该更仔细地阅读你的书。我只是通过引用传递数组,而不是size
,所以我不知道你的意思是“我只是通过引用传递数组”不,你不是。请停止基于猜测的编程。C++不是语言,它太奇怪了。它也是一个很好的循环,因为大小永远不会改变。
input_data(&data[1000], size);