一、了解指针的基础部分:
1)指针基础:指针是地址的别名。定义如下:int a=10;int *p=&a;扩充(*的不同含义:指针的定义,接引用,乘法)。
2)指针和数组的关系:定义如下:int *p<=>arr<=>&arr[0];(表示的是数组元素的首地址),而关于*arr解引用 *arr<=>*(arr+0) arr[2]<=>*(arr+2)。
3)指针的类型强转:定义一个指针p如下:int *p;p+1;这里p+1指的是加一个单元格,而单元格的大小取决于指向的类型。(这里要注意的是指针的大小与类型级别无关,与操作系统有关)。
~~~指针基本定义介绍完了,下面我们进行代码实现
二、
1)首先用数组的方式实现
#include#include void swap(int *p,int *q) {//实现两数的交换的函数 int temp = *p; *p = *q; *q = temp; } void resrver(int *arr,int left,int right) { int times = (right - left + 1) / 2;//逆转的次数 for (int i = 0; i < times;i++) {//这里的循环条件也可以用left 结果: 15 16 1 2 3
2)用指针的方式实现(根据指针和数组的关系,只需要将函数resrver中的代码稍作修改就可以了)
void resrver(int *arr,int left,int right) { int* a = arr+left; int* b = arr+right; while (a < b) { swap(a,b); a++; b--; } }结果: 15 16 1 2 3
总结:关于数组与指针的关系错综复杂:例如:像*(p+1)<=>arr[1]<=>*&arr[1] (先取地址,在解引用)。而&*p<=>&arr[0]<=>arr,(先解引用,在区地址),两者不能混淆。



