按值发送一个数组作为参数

Send an array by value as an parameter?

本文关键字:数组 一个 参数      更新时间:2023-10-16

我做了一个很简单的代码,学习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与原始数组的第一个元素的地址相同。

相关文章: