【发布时间】:2021-02-04 15:18:14
【问题描述】:
假设我们要使用以下代码实现冒泡排序:
void bubbleSort(int arr[], int n){
for(int i=0; i<n-1; i++){
for(int j=i+1; j<n;j++){
if(arr[i]>arr[j]){
swap(arr[i], arr[j]);
}
}
}
}
在swap 函数中arr[i] 和arr[j] 之前是否应该有一个&,有什么区别?我记得在某处读到不需要将& 符号放在数组元素之前以便直接使用地址。我知道这是一个愚蠢的问题,所以请原谅我问这个问题,但是这些小细节有助于我更好地理解指针。
【问题讨论】:
-
std::swap函数已通过引用获取其参数。 -
type_name & variable_name提供参考。&variable_name(大部分时间)生成一个指针。 -
虽然数组本身可以衰减为指向其第一个元素的指针,但数组元素不会自动转换为指针。数组中的
int与任何其他int之间没有区别。 -
请注意,一元“地址”运算符
&与类型中使用的“引用”&完全无关。 -
通常,在 C++ 中,函数是通过值还是通过引用获取参数是函数的属性以及它如何声明其参数。您不需要告诉调用站点参数是如何传递的。在 C 中,因为不存在引用类型,所以实现传递引用的唯一方法是使用指针。在这种情况下,您需要使用
&来获取调用站点的参数地址。有时在 C++ 中仍然会发生这种情况,但 ir 应该是例外。