C++ 为什么我们必须将值而不是地址传递到一个";“参考电话”;C+中的函数+;?
我在我的材料中学习了这段代码:C++ 为什么我们必须将值而不是地址传递到一个";“参考电话”;C+中的函数+;?,c++,reference,pass-by-reference,C++,Reference,Pass By Reference,我在我的材料中学习了这段代码: void callByRef(&a, &b); int main(){ int k = 12; int m = 4; callByRef(k, m) //QUESTION HERE return 0; } void callByRef(&a, &b){ a += 3; b -= 2; return; } 所以我的问题是,当声明callByRef时,我们使用a和b的地址作为
void callByRef(&a, &b);
int main(){
int k = 12;
int m = 4;
callByRef(k, m) //QUESTION HERE
return 0;
}
void callByRef(&a, &b){
a += 3;
b -= 2;
return;
}
所以我的问题是,当声明callByRef时,我们使用a和b的地址作为参数,所以当我们在main中调用callByRef时,为什么我们需要传入(k,m)而不是(&k,&m) 这是基本的,但我只是想为我未来的学习做好准备。 谢谢大家 callByRef()函数将引用作为参数传递,因此不需要向函数发送显式引用。通读这篇文章以便更好地理解 callByRef()函数将引用作为参数传递,因此不需要向函数发送显式引用。通读这篇文章以便更好地理解
a
的运算符表示变量a的地址,*a的运算符表示由变量a寻址的内存内容。现在函数定义如下:
void callByRef(int &a, int &b){
a += 3;
b -= 2;
return;
}
其中int&a
意味着a将是int类型的某个变量的a。因此,无论何时调用函数,都需要传递变量本身而不是它的地址,因此callByRef(a,b)
而不是callByRef(&a,&b)
这样声明的原因如下,参数传递给函数,通过值传递,即变量的内容从字面上复制到函数变量中,因此在函数内部对其进行的任何更改都不会产生任何影响。例如:
void callByVal(int a, int b){
a += 3;
b -= 2;
return;
}
并具有:
x = 5;
y = 10;
调用callByVal(x,y)
对x和y没有任何影响。要克服此问题,您需要通过引用或int&a
传递参数,或者作为替代方法,您可以直接传递指针并更新内存:
void callByPtr(int *a, int *b){
*a += 3;
*b -= 2;
return;
}
现在传递变量地址是有意义的,例如,callByPtr(&a,&b)
&a的运算符表示变量a的地址,*a的运算符表示变量a所寻址的内存内容。现在函数定义如下:
void callByRef(int &a, int &b){
a += 3;
b -= 2;
return;
}
其中int&a
意味着a将是int类型的某个变量的a。因此,无论何时调用函数,都需要传递变量本身而不是它的地址,因此callByRef(a,b)
而不是callByRef(&a,&b)
这样声明的原因如下,参数传递给函数,通过值传递,即变量的内容从字面上复制到函数变量中,因此在函数内部对其进行的任何更改都不会产生任何影响。例如:
void callByVal(int a, int b){
a += 3;
b -= 2;
return;
}
并具有:
x = 5;
y = 10;
调用callByVal(x,y)
对x和y没有任何影响。要克服此问题,您需要通过引用或int&a
传递参数,或者作为替代方法,您可以直接传递指针并更新内存:
void callByPtr(int *a, int *b){
*a += 3;
*b -= 2;
return;
}
现在传递变量地址是有意义的,例如,callByPtr(&a,&b)
您不传递值。C++中的引用不完全像指针。将它们简单地看作是对象的另一个名称
当然,您需要将该名称绑定到对象,以便引用引用它。例如,当我们写int&i=k
我们是说已经命名为k
的变量可以称为i
。要绑定引用,我们需要命名另一个对象。对象的名称是k
,而不是&k
这同样适用于函数参数和参数。函数callByRef
指定用于对它将调用的a
和b
两个对象进行操作。调用该函数时,必须命名它将引用的原始对象。并且原始对象被命名为k
和m
,而不是&k
和&m
,如果不传递值。C++中的引用不完全像指针。将它们简单地看作是对象的另一个名称
当然,您需要将该名称绑定到对象,以便引用引用它。例如,当我们写int&i=k
我们是说已经命名为k
的变量可以称为i
。要绑定引用,我们需要命名另一个对象。对象的名称是k
,而不是&k
这同样适用于函数参数和参数。函数callByRef
指定用于对它将调用的a
和b
两个对象进行操作。调用该函数时,必须命名它将引用的原始对象。原始对象被命名为k
和m
,而不是&k
和&m
“我们使用a和b的地址作为参数”什么?声明应该类似于void callByRef(int&a,int&b)
,它不是将参数的地址作为引用来声明。void callByRef(&a,&b)
。如果这就是你的课程材料所包含的内容,你应该抱怨并要求退款。“我们使用a和b的地址作为参数”什么?声明应该类似于void callByRef(int&a,int&b)
,它不是将参数的地址作为引用来声明。void callByRef(&a,&b)
。如果这就是你的课程内容,你应该抱怨并要求退款。谢谢你的回答哈哈哈烤肉串!现在就读吧。谢谢你的回答哈哈哈烤肉串!现在读吧。