为什么这个函数在没有指针的情况下改变列表值
Why does this function change list value without pointer?
如果我传递一个值给一个函数,它不做一个值的副本,这样,如果我在函数内改变它,它不会改变原来的,除非我传递它的地址?这可能是一个愚蠢的问题,但我不明白为什么这个函数会改变列表的值。
void array_increment(int list[],int SIZE)
{
for (int i=0; i<SIZE; i++)
list[i] = list[i]+1;
}
int main()
{
int c[]={3,1,0,-5,1};
array_increment(c,5);
for (int i = 0; i < 5; i ++)
cout << c[i] << " ";
cout << endl;
}
4 2 1 -4 2
void array_increment(int list[], int SIZE)
等价于
void array_increment(int* list, int SIZE)
所以形参是一个指针
对于像指针这样的基本类型,它只是一个浅拷贝。指针本身被复制了,但它所指向的对象却没有被复制。因此,函数内部的list
变量仍然指向函数外部的数组。
有几个问题。
- 普通数组不可复制或分配。
-
int a[]
等功能参数将调整为指向int* a
。 - 数组名可以衰变衰变为指向其第一个元素的指针
第二个点意味着
void array_increment(int list[],int SIZE)
是
void array_increment(int* list,int SIZE)
和第三点意味着你可以传递数组c
作为第一个参数,因为它可以衰减到int*
。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 如何在不改变原始数组的情况下将数组作为参数传递
- 如何在不改变顺序的情况下将int64值移位到无符号int64空间
- Tetgen:从曲面的给定三角形开始,在不改变曲面连接性的情况下创建新网格
- 在c++中不改变倒数第二位的情况下移动整数中的位
- 为什么在const仍然是const的情况下改变了指向const的指针的差异?
- c++指针:在不改变地址的情况下改变内容
- 在不改变精灵位置的情况下缩放资产
- 在不改变索引顺序的情况下从动态数组中删除元素
- 在不改变接口的情况下为对象增加功能
- 为什么这个函数在没有指针的情况下改变列表值
- stereoCalibrate()即使在不应该改变焦距的情况下也会改变焦距
- 在c++中是否有一个很好的理由在不改变属性的情况下引用它?
- 在不丢失数据的情况下改变帧类型