方法1:使用额外的数组 这是一种比较简单的方法,它创建一个额外的数组来存储逆置后的元素,然后将其复制回原始数组。
#include
void reverseArray(int arr[], int size) {
int reversed[size];
for (int i = 0; i < size; i++) {
reversed[i] = arr[size - 1 - i];
}
for (int i = 0; i < size; i++) {
arr[i] = reversed[i];
}
}
int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
reverseArray(myArray, size);
for (int i = 0; i < size; i++) {
std::cout << myArray[i] << " ";
}
return 0;
}
方法2:使用两个指针 这种方法使用两个指针,一个指向数组的开头,另一个指向数组的末尾,然后交换它们指向的元素,逐步向中间移动。
#include
void reverseArray(int arr[], int size) {
int start = 0;
int end = size - 1;
while (start < end) {
// 交换元素
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
// 移动指针
start++;
end--;
}
}
int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
reverseArray(myArray, size);
for (int i = 0; i < size; i++) {
std::cout << myArray[i] << " ";
}
return 0;
}
这两种方法都可以成功逆置数组中的元素。选择哪种方法取决于您的需求和性能要求。方法2通常更节省内存,因为它不需要额外的数组来存储逆置后的元素。
小傻瓜提问:第一种方法为啥不会发生我操作的是localvariable而导致原数组不改变的问题?
在第一种方法中,确实会创建一个名为 reversed
的局部数组,然后将逆置后的元素复制回原始数组 arr
。这是因为数组在C++中是传值的,函数参数 arr
接受了原始数组的一个副本,而不是原始数组本身。因此,对 reversed
数组的操作不会影响原始数组 myArray
。
在这种情况下,逆置是在 reversed
数组中进行的,然后再将其内容复制回原始数组。这样做确保了原始数组不会被修改,因为它们是不同的内存位置。
提问:第二种我操作的那个函数为啥不用加&?
在第二种方法中,不需要使用 &
运算符来传递数组的地址,因为数组名本身在C++中被解释为指向数组的首元素的指针。
当您在函数参数中使用数组名时,实际上是将指向数组的首元素的指针传递给函数,而不是整个数组的副本。因此,在 reverseArray
函数中,arr
参数是一个指向数组的指针,它指向传递给函数的原始数组。
因此,在函数中对 arr
操作实际上就是在原始数组上进行操作。您无需使用 &
运算符来获取数组的地址,因为数组名本身已经是一个指向数组的指针。