更改变量的函数,即使按值传递也是如此
Function changing a variable, even when passed by value?
这就是我所拥有的,它导致了一些非常奇怪的差异。
#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 一起工作?
您正在覆盖堆栈。
首先,声明一个接受数组的函数:
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(
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- C++类 - 初始化列表 - 递归 - 按值传递
- 将函数参数完美转发到函数指针:按值传递呢?
- 棘手的按值传递和按引用递归问题传递
- 不同于按值传递和常量引用传递的程序集
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么按值传递QStringView比引用常量更快?
- 获取 std::函数以推断按引用传递/按值传递
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 防止在按值传递对象(继承)时进行切片
- 按值传递类和结构
- C++按引用传递还是按值传递?
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 当空变量没有定义时,按值传递它们是否安全
- 变量作为呼叫按值传递的地址
- 更改变量的函数,即使按值传递也是如此
- 修改按值传递的参数对调用方的变量没有影响