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
函数中也会发生变化的任何想法?
由于数组衰减,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)
。
你可以看看为什么我们不能传递数组来按值函数?这很好地解释了它。
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 棘手的按值传递和按引用递归问题传递
- 不同于按值传递和常量引用传递的程序集
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么按值传递QStringView比引用常量更快?
- 获取 std::函数以推断按引用传递/按值传递
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 按值和按引用差异的函数模板
- 布尔值是通过引用传递的,但我仍然在 cpp 中遇到编译错误
- 运算符 = 回合侧一个按值秒按引用
- 按值或常量引用传递函数
- 按值与按引用读取C++向量
- 修改向量的元素(按值、按引用) 函数C++
- 按值或常量引用传递
- 函数返回值与修改引用传递的值
- 通过构造函数中的值或常量引用传递的参数
- 返回值或修改引用传递的参数是否更快?
- 按值将类型结构传递给函数,错误:声明"average"中的两个或多个数据类型!!-
- c++中的函数按值或按引用返回
- 哪个更好:按值或按常量引用返回std::string