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);