我想问一下,我对传入的数组做冒泡排序,直接用 int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
而不是
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
(arr + j + 1) = temp;
做两个参数的交换,没有用做解引用对原来的实参进行操作为什么实参也进行了排序
#include
using namespace std;
void paixu(int * arr, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
/* if (*(arr + j) > *(arr + 1 + j))
{
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}*/
}
}
}
int main() {
int str[6] = { 1,3,2,5,7,6 };
int length = sizeof(str) / sizeof(str[0]);
paixu(str, length);
for (int i = 0; i < length; i++)
{
cout << str[i] << endl;
}
system("pause");
return 0;
}
在编译过程中,编译器会将数组的下标转换成指针再进行访问,所以用下标和指针的结果是一样的,不同的是,用数字下标需要转换成指针再进行访问,数组下标运行的速度就会比指针慢,即指针访问的效率比数组下标访问的效率高
下标访问编译器会转换成指针访问,一样
供参考:https://www.cnblogs.com/fengxing999/p/10249671.html
下标和解引用一样的意思