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?这个解释的很好
所以我认为 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[]
作为一种类型本质上仍然是一个指针。因此,您传递的是数组 "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?这个解释的很好