为什么不通过引用传递数组?

Axt*_*eat 4 c++

为什么x打印出1,2,3,4而不是4,3,2,1.当我打印输入[0]时,它说4.不应该通过引用传递数组吗?所以我可以用x来表示原来是x的输入?顺便说一句,这是C++.这不是另一个问题的重复.如果我在rev listo中打印出数组,它会正确打印.问题在于可以在main函数中调用数组.

using namespace std;

void rev_listo(int input[], int num)
{
    int end_list[num];

    for (int x = 0; x<num; x++) {
        end_list[x]=input[num-x-1];
        // cout<<end_list[x]<<endl;
    }
    // std::cout<<input<<std::endl;

    input=end_list;
    cout<<input[0]<<endl;
}

int main() {
    int x [4];
    x[0]=1;
    x[1]=2;
    x[2]=3;
    x[3]=4;

    rev_listo(x,  4);

    for(int y = 0; y<4; y++) {
        std::cout<<x[y]<<std::endl;
    }

    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

Kun*_*uri 5

在内部,当你这样做时void rev_listo(int input[], int num),会传递一个指向数组第一个元素的指针(只是为了避免复制数组).

像这样:

void rev_listo(int *input /* = &(arr[0])*/, int num)
Run Code Online (Sandbox Code Playgroud)

请注意,input指针本身是按值复制的,而不是通过引用复制的.所以,当你这样做时,第一个元素的地址end_list被复制到input指针:

input=end_list;
Run Code Online (Sandbox Code Playgroud)

当函数结束时,指针input死亡.

void rev_listo(int input[], int num)
{

    int end_list[num];

    for(int x = 0; x<num; x++){
       end_list[x]=input[num-x-1];
    //cout<<end_list[x]<<endl;
    }
   // std::cout<<input<<std::endl;

    input=end_list;
   cout<<input[0]<<endl;
} // input pointer dies here. So does num.
Run Code Online (Sandbox Code Playgroud)

input=end_list;您应该手动复制数组,而不是像这样分配指针:像这样:

for(int x = 0; x<num; x++){
   input[x] = end_list[x];
}
Run Code Online (Sandbox Code Playgroud)