通过按值调用更改数组元素

Changing Array elements by call by value

本文关键字:数组元素 值调用      更新时间:2023-10-16

我正在将数组元素传递给一个函数。此函数为数组的每个元素添加5。我还传递了一个整数并将其加5……尽管它是一个"按值调用"函数,但整数的值在main()中不会改变(这是预期的),但数组元素确实会改变。。。

我不想知道是怎么回事,为什么?

#include <iostream>
using namespace std;
void change(int x[],int y);
int main()
{
    int sharan[]={1,2,3,4};
    int a=10;
    change(sharan,a);
    for(int j=0;j<4;j++)
    {
        cout<<sharan[j]<<endl;
    }
    cout<<endl<<"a is : "<<a;
    return(0);
}
void change(int x[],int y)
{
    for(int i=0;i<4;i++)
    {
        x[i]+=5;
    }
    y+=5;
}

数组衰减到指针,

void change(int x[],int y)相当于void change (int *x, int y )

x[i] += 5;

您正在更改x+i 的地址内容

change内部的y=5;基本上更新了地址未传递的y的本地副本,因此在change存在之后,y的实际值没有修改

因为array总是一个引用类型,所以外部的任何更改也会影响调用函数中的array

正如你在代码中看到的:

change(sharan,a); // here `sharan` points the base address an you are passing it.

C++不支持按值传递原始数组。当您尝试按原样传递它们时,它们将转换为指向数组的指针。因此,如果修改数组的元素,则更改将反映在调用函数中。在这种情况下,main()