指针:数组中的元素逆序存放
时间: 2024-01-08 21:03:37 浏览: 36
以下是使用指针将数组中的元素逆序存放的C语言代码示例:
```c
#include <stdio.h>
void inv(int *x, int n) {
int i, tem;
for (i = 0; i < n / 2; i++) {
tem = x[i];
x[i] = x[n - i - 1];
x[n - i - 1] = tem;
}
}
int main() {
int i, a[10] = {3, 7, 9, 11, 0, 6, 7, 5, 4, 2};
printf("The original array:\n");
for (i = 0; i < 10; i++)
printf("%3d", a[i]);
printf("\n");
inv(a, 10);
printf("The array has been inverted:\n");
for (i = 0; i < 10; i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}
```
相关问题
用指针将数组中的元素逆序存放
### 回答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--;
}
}
```
调用该函数时,传入数组的首地址和数组的长度即可实现将数组元素逆序存放的功能。
使用指针实现数组元素逆序存放
可以通过以下步骤使用指针实现数组元素逆序存放:
1. 定义一个指向数组首元素的指针和一个指向数组尾元素的指针。
2. 使用循环将首指针指向的元素与尾指针指向的元素交换,并将首指针向后移动一个位置,尾指针向前移动一个位置,循环直到首指针和尾指针相遇。
下面是一个示例代码:
```c++
void reverseArray(int* arr, int size) {
int* start = arr;
int* end = arr + size - 1;
while (start < end) {
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
```
在这个函数中,我们首先定义了两个指针 `start` 和 `end`,一个指向数组首元素,一个指向数组尾元素。然后,我们使用 `while` 循环,每次将 `start` 指向的元素与 `end` 指向的元素交换,并将 `start` 向后移动一个位置,`end` 向前移动一个位置,直到两个指针相遇,即数组元素逆序存放完成。