我将数组元素传递给函数。此函数为数组的每个元素添加5。我也传递一个整数并向它添加5 ...即使它是按值调用'函数整数dosn的变化值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;
}
答案 0 :(得分:5)
数组衰减到指针,
void change(int x[],int y)
相当于void change (int *x, int y )
x[i] += 5;
您正在x+i
y=5;
内{p> change
基本上更新了地址未通过的y
的本地副本,因此在{{1}之后y
的实际值没有修改存在
答案 1 :(得分:1)
因为array
始终是引用类型,因此外部的任何更改都会影响调用函数中的array
。
正如您在代码中看到的那样:
change(sharan,a); // here `sharan` points the base address an you are passing it.
答案 2 :(得分:1)
C ++不支持按值传递原始数组。当您尝试传递它们时,它们将转换为指向数组的指针。因此,如果修改数组的元素,则更改将反映在调用函数中。在这种情况下main()
。