c++指针 将长度为size的整型数组逆序。
时间: 2024-04-30 13:17:18 浏览: 62
可以使用如下代码将长度为size的整型数组逆序:
```
void reverse_array(int *arr, int size) {
int *start = arr;
int *end = arr + size - 1;
while(start < end) {
int tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
}
```
这个函数使用指针来实现数组的反转。具体思路是,使用两个指针start和end,分别指向数组的开头和结尾。然后循环遍历数组,每次交换start和end指向的元素,然后将start向后移动,将end向前移动。当start>=end的时候,数组反转完成。
相关问题
用指针将数组中的元素逆序存放
### 回答1:
可以使用两个指针分别指向数组的首尾元素,然后交换它们所指向的元素,直到它们相遇为止。下面是一个示例代码:
```c
void reverse_array(int *arr, int len) {
int *p1 = arr, *p2 = arr + len - 1;
while (p1 < p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
```
在这个函数中,`arr` 是指向数组首元素的指针,`len` 是数组的长度。首先,定义两个指针 `p1` 和 `p2`,分别指向数组的首尾元素。然后,通过一个循环,每次交换 `p1` 和 `p2` 所指向的元素,并将 `p1` 向后移动一位,将 `p2` 向前移动一位,直到 `p1` 和 `p2` 相遇为止,此时数组中的元素已经逆序存放了。
### 回答2:
通过使用指针,可以将数组中的元素逆序存放。假设有一个整型数组arr,包含n个元素。首先,定义两个指针,分别指向数组的起始位置和末尾位置,记为ptr_start和ptr_end。然后,通过循环的方式,将ptr_start指向的元素与ptr_end指向的元素进行交换,然后分别将ptr_start指针向后移动一位,ptr_end指针向前移动一位,直到ptr_start指针大于等于ptr_end指针时停止交换。这样就能够将数组中的元素逆序存放。具体的算法步骤如下:
1. 定义指向数组起始位置的指针ptr_start,指向数组末尾位置的指针ptr_end。
2. 进入循环,判断ptr_start指针是否小于ptr_end指针。
3. 如果条件成立,执行以下操作:
- 交换ptr_start指针和ptr_end指针所指向的元素。
- 将ptr_start指针向后移动一位。
- 将ptr_end指针向前移动一位。
4. 循环结束后,数组中的元素就被逆序存放了。
下面是一个示例代码的实现:
```cpp
#include <iostream>
using namespace std;
void reverseArray(int* arr, int n) {
int* ptr_start = arr;
int* ptr_end = arr + n - 1;
while (ptr_start < ptr_end) {
int temp = *ptr_start;
*ptr_start = *ptr_end;
*ptr_end = temp;
ptr_start++;
ptr_end--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "原始数组:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
reverseArray(arr, n);
cout << "逆序数组:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
原始数组:1 2 3 4 5
逆序数组:5 4 3 2 1
通过以上的算法,我们可以逆序存放数组中的元素。
### 回答3:
要用指针将数组中的元素逆序存放,可以采取以下步骤:
首先,定义一个指向数组首元素的指针和一个指向数组末尾元素的指针。
然后,使用循环将这两个指针逐渐向中间靠拢,交换它们所指向的元素。具体步骤如下:
1. 定义一个整数变量i,令其初始值为0,表示数组的首元素的下标。
2. 定义一个整数变量j,令其初始值为数组长度减1,表示数组的末尾元素的下标。
3. 使用循环,当i小于j时,执行以下操作:
a. 使用临时变量temp,将指针p1所指向的元素的值存储起来。
b. 将指针p2所指向的元素的值赋给指针p1所指向的元素。
c. 将temp的值赋给指针p2所指向的元素。
d. 将指针p1后移一位,即p1++。
e. 将指针p2前移一位,即p2--。
f. 将i的值增加1,即i++。
4. 循环结束后,数组中的元素逆序存放完成。
上述步骤可以通过以下代码实现:
```c++
void reverseArray(int* arr, int size) {
int* p1 = arr; // 指向数组首元素的指针
int* p2 = arr + size - 1; // 指向数组末尾元素的指针
while (p1 < p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
```
调用该函数时,传入数组的首地址和数组的长度即可实现将数组元素逆序存放的功能。
pta 指针实现10个数的逆序排序
PTA,通常指Pascal Triangle Algorithm,即帕斯卡三角形算法,它是一种用于生成二项式系数的数组排列,与逆序排序无关。如果你想用指针在内存中实现一个数组的逆序排序,你可以使用双指针法,即从数组两端开始交换元素,逐步向中间移动。
以下是使用C++示例,假设有一个整型数组`nums`包含10个数:
```cpp
#include <iostream>
void reverseArray(int* nums, int n) {
if (n <= 1) return; // 如果只有一个元素或为空,无需反转
int start = 0; // 存储左指针,初始位置为0
int end = n - 1; // 存储右指针,初始位置为数组长度减一
while (start < end) { // 当两个指针未相遇时
std::swap(nums[start], nums[end]); // 交换两个指针指向的元素
start++; // 左指针右移一位
end--; // 右指针左移一位
}
}
int main() {
int nums[10] = {5, 4, 3, 2, 1, 6, 7, 8, 9, 0}; // 示例数组
int size = sizeof(nums) / sizeof(nums[0]);
reverseArray(nums, size);
for (int i : nums) {
std::cout << i << " ";
}
return 0;
}
```
运行这个程序,你会看到数组`nums`已经被逆序了。如果想了解如何使用指针实现逆序排序的原理,请问我其他相关问题。
阅读全文