C++按引用传递还是按值传递?

C ++ pass by reference or pass by value?

所以我认为 C++ 按值工作,除非你使用指针。

虽然今天我写了这段代码,但它的工作方式与预期不同:

#include <iostream>

using namespace std;

void bubbleSort(int A[],int arrSize);

bool binarySearch(int B[],int key,int arrSize2);

int main(){
    int numberArr[10] = {7,5,3,9,12,34,24,55,99,77};
    bool found;
    int key;


    bubbleSort(numberArr,10);
    /**
    uncomment this piece of code
        for(int i=0; i<10; i++){
        cout<<numberArr[i]<<endl;       
    }

    **/


    cout<<"Give me the key: ";
    cin>>key;

    found=binarySearch(numberArr,key,10);

    cout<<found;
}

void bubbleSort(int A[],int arrSize){
    int temp;

        for(int i=0; i<arrSize-1; i++){
        for(int j=i+1; j<10; j++){
            if(A[i]>A[j]){
                temp=A[i];
                A[i]=A[j];
                A[j]=temp;
            }
        }
    }
}



bool binarySearch(int B[],int key,int arrSize2){
    int i=0;
    bool found=false;

    while(i<arrSize2 && !found){
    if(B[i]==key)
    found=true;
    i++;
    }


    return found;
}

当 运行 时 numberArr 中的值似乎也在 main() 函数中发生变化(排序),只需取消注释块。

想知道为什么 numberArr 的值在 main 函数中也会发生变化吗?

由于 array decaying

int[] 作为一种类型本质上仍然是一个指针。因此,您传递的是数组 "reference"(作为将用于 "pass-by-reference" 的值,而不是像 int& 这样的实际 C++ 引用)而不是 "value."

int[]int* 的 "value" 本身仍然是 "pass-by-value," 只是该值被用来访问 "pointed-at" 对象内存参考。

在 C++ 中,您不能按值传递数组。 您总是将指针传递给第一个元素。这就是为什么您可以在不破坏代码的情况下从 foo(int a[]) 切换到 foo(int * a) 的原因。

示例: 一些 IDE 创建的主要功能是这样的:int main(int argc, char * argv[]) 其他的是 int main(int argc, char ** argv).

你可以看看Why can't we pass arrays to function by value?这个解释的很好