如果我将一个值传递给一个函数,它不会复制该值,这样如果我在函数中更改它,它不会更改原始值,除非我改为传递其地址?这可能是一个愚蠢的问题,但我无法弄清楚为什么这个函数正在改变列表的值。
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
答案 0 :(得分:7)
void array_increment(int list[], int SIZE)
相当于
void array_increment(int* list, int SIZE)
所以参数是一个指针。
对于像指针这样的基本类型,它只是一个浅表副本。指针本身被复制,但它指向的不是。因此函数内的list
变量仍指向位于函数外部的数组。
答案 1 :(得分:4)
有一些问题在起作用。
int a[]
等功能参数将调整为指针int* a
。第二点意味着
void array_increment(int list[],int SIZE)
真的是
void array_increment(int* list,int SIZE)
和第3点意味着您可以将数组c
作为第一个参数传递,因为它可以衰减为int*
。