通过按值调用更改数组元素
Changing Array elements by call by value
我正在将数组元素传递给一个函数。此函数为数组的每个元素添加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()
。
相关文章:
- 数组元素更改值?
- 查找数组中指示性较大但数组中值较小的元素
- C++初始化/填充静态成员 std::数组元素到特定值
- 添加数组元素:需要左键作为赋值的左操作数
- 将值与数组元素进行比较
- OPENCL:__LECAL数组的值在屏障调用后丢失
- 覆盖数组元素时如何调用构造函数
- 指向数组的指针会更改数组元素的值
- 未定义的行为:数组元素的值隐式/不合逻辑地更改
- 避免在函数调用中计算数组元素
- 为什么只调用数组元素[3][..]或[4][..]会导致EXC_BAD_ACCESS
- 数组元素值,元素地址和指针增量
- 如果我自己不分配数组元素,数组元素的值是多少
- 如何避免意外地按值而不是按引用获取数组元素
- C++如何将数组传递给函数,然后调用它来显示数组的值
- 用相同的值填充了 wchar 数组元素
- 数组元素的值保持不变
- 为什么数组元素在循环内外具有不同的值
- 通过按值调用更改数组元素
- 在c++中使用枚举类值调用数组元素