一、数组的逆置
- 什么是逆置?
1.把数组中的元素 按逆序 重置
- reverse()逆置函数
- 简而言之,将首尾元素依次相交换。下面,请看代码:
#include <stdio.h>
void reverse(int arr[], int n)
{
int p = 0;//p q 表示两个下标,p 指向头, q 指向尾
int q = n - p - 1;// q 是怎么来的? p + q = n - 1,首元素下标 加 尾元素下标 等于元素个数 -1
while (p < q)
{
int tmp = arr[p];
arr[p++] = arr[q];//优先级不同 “[]”优先级 高于 “++”的优先级
arr[q--] = tmp;//所以先使用arr[p] 再 p++。 q--同理
}
}
int main()
{
int arr[] = { 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 };
int n = sizeof(arr) / sizeof(arr[0]);//数组元素个数
int i = 0;
reverse(arr, n);//逆置
//输出
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
-数组逆置的图像解释
如果不理解,没有关系,下面我们来看图解:
3.指针表述–函数代码块
void reverse(int arr[], int n)
{
int *p = arr;//指针变量p 指向数组首元素
int *q = p + n - 1;//指针变量q 指向数组尾元素,即 arr[n-1]
while (p < q)
{
int tmp = *p;
*p++ = *q;//*p++ 运算级先后顺序不同("*"的优先级 大于 "++" 的优先级),所以 先使用*p 再 p++
*q-- = tmp;//同理 先*q 再 q--
}
}
- 结尾
Ending:以上代码及解释希望能帮到你。如果还有不理解的地方,可以评论区留言,我很高兴为你解答~