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

C ++ pass by reference or pass by value?

本文关键字:按值传递 按引用传递 C++      更新时间:2023-10-16

所以我认为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函数中也会发生变化的任何想法?

由于数组衰减,int[]作为一个类型本质上仍然是一个指针。因此,您传递的是一个数组"引用"(如将用于"按引用传递"的值,而不是像int&这样的实际C++引用(,而不是"值"。

int[]int*本身的"值"仍然是"按值传递",只是该值用于通过引用访问"指向"对象内存。

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

示例:一些 IDE 创建如下主函数:int main(int argc, char * argv[])其他 IDE 作为int main(int argc, char ** argv)

你可以看看为什么我们不能传递数组来按值函数?这很好地解释了它。