一、 整型数组指针运算
1、指针可以进行加法运算,如:p + n
其结果依旧是一个指针,新的指针是在原来的地址基础上加n * (sizeof(基类型))个字节。
指针和指针不能求和运算,但可以求差。两指针相见必须保持类型一致,其差的结果为相差基类型的个数。
例题:
①下列打印的值分别为:
(* 和 ++都是单目运算符,结合方向自右向左)
p 代表数组首元素的地址,即*p表示数组首元素的值,所以为1;
p++表达式没加,所以*p++也是首元素的值为1;
++p表达式加了,p的值也加了1,所以*++p的值为3;
*(a + 1)表示第一个元素的值,*(a + 1)等价于a[1] ,值为2;
②
int *p;
*p = NULL; // 不能间接访问
③数组求和
④数组的逆序(调用swap函数可以交换主调函数两数的值)
⑤数组利用指针的选择排序
⑥利用指针进行数组的二分法查找
上述均为函数,需用主函数对其进行调用。
二、迭代器
①数组的遍历
②数组逆序
③数组的选择排序
④数组的冒泡排序
⑤数组的二分法查找
三。函数的递归调用与指针
① 数组函数递归二分法:
②利用指针遍历数组
③数组的逆序
④快速排序
其目标是将数组分为两部分,左边部分小于基准数t,右边部分大于基准数t。(大都选择数组第一个元素为基准数t)
步骤:
(定义指针p,q ; *p = begin;*q = end)
Ⅰ、选择数组第一个元素为基准数;(t * begin)
Ⅱ、自右向左寻找 “小于” 基准数的数;
Ⅲ、自左往右寻找 “大于” 基准数的数;
Ⅳ、交换两数;
Ⅴ、当p q 位置重合,交换该数和基准数t;
Ⅵ、对基准数组数两侧的“子数组”分别重复上述步骤,即函数递归。
代码如下: