按值发送一个数组作为参数
Send an array by value as an parameter?
我做了一个很简单的代码,学习c++。我发现当我把在堆栈上创建的数组发送给另一个函数时,这个函数改变了源数组——这与其他变量不同。像整型或其他类型的
为什么会这样?
代码:void ByValue(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
arr[i] += 1;
}
}
void SimpleArray()
{
int arr[3];
for (int i = 0; i < 3; i++)
{
arr[i] = i+1;
cout << "Element [" << i << "] is " << arr[i] << endl;
}
cout << endl;
ByValue(arr, 3);// <-- should be by value
for (int i = 0; i < 3; i++)
{
cout << "Element after change [" << i << "] is " << arr[i] << endl; // <-- this shouldent change ?
}
cout << endl;
}
给出输出:
Element [0] is 1
Element [1] is 2
Element [2] is 3
Element after change [0] is 2
Element after change [1] is 3
Element after change [2] is 4
第二个输出应该与第一个相同,如果它是通过value传递的,但现在我是不是用了一个指针?
实际上,ByValue
的原型是
void ByValue(int* arr, int size)
。数组将衰变成指针类型。因此,对数组的修改将反映在调用者中。
注意*(arr + n)
的符号与arr[n]
相同
将数组传递给函数会使其衰变成指针。原来的数组发生了变化。Arr只是数组中第一个元素的地址。这个地址被传递给函数。在函数中如果你输入
arr[index] = value;
;它被分解为*(arr + index) = value;
,这将对原始数组进行更改,因为arr
与原始数组的第一个元素的地址相同。