为什么此函数在没有指针的情况下更改列表值

时间:2015-07-08 22:55:44

标签: c++ arrays function

如果我将一个值传递给一个函数,它不会复制该值,这样如果我在函数中更改它,它不会更改原始值,除非我改为传递其地址?这可能是一个愚蠢的问题,但我无法弄清楚为什么这个函数正在改变列表的值。

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

2 个答案:

答案 0 :(得分:7)

void array_increment(int list[], int SIZE) 

相当于

void array_increment(int* list, int SIZE) 

所以参数是一个指针。

对于像指针这样的基本类型,它只是一个浅表副本。指针本身被复制,但它指向的不是。因此函数内的list变量仍指向位于函数外部的数组。

答案 1 :(得分:4)

有一些问题在起作用。

  1. 普通数组不可复制或可分配。
  2. int a[]等功能参数将调整为指针int* a
  3. 数组名称可以将衰减衰减为指向其第一个元素的指针
  4. 第二点意味着

    void array_increment(int list[],int SIZE) 
    

    真的是

    void array_increment(int* list,int SIZE) 
    

    和第3点意味着您可以将数组c作为第一个参数传递,因为它可以衰减为int*