嵌入式开发学习日志Day14
一、指针的加法运算
注意:一边为指针,一边为整型;
地址与地址之间不能求和,但可以求差(如果相减,表示之间相差几个基类型字节,根据正负可以判断谁在前谁在后),必须保证基类型相同
eg:
int a[] = {1,2,3,4,5,6,7,8,9,0};
int *p = a;
p + 1;
pprintf("%d\n",a);
地址加n,实际是地址向后偏移sizof (基类型)乘以n个字节;
(1)判断电脑是小端存储还是大端存储;
(2)求一个数组中的最大值;
程序:
(3)将一个数组中的元素逆序输出;
(4)用指针进行选择排序;
程序:
二、空指针 NULL
一般定义:
#define NULL (0)
空指针无法进行指针运算;
空指针表示一种状态,指没有指向任何地址;该地址指向的空间不可被访问;
防止野指针的方法: int *p = NULL
eg:查找数组中的数;
程序:
三、指针的比较大小
指针比较大小时,基类型必须相同;
eg:便利数组;
程序:
(2)将数组中的元素逆序输出;
(3)用函数的递归调用将数组逆序输出;
程序:
四。快速排序法
迭代法加递归调用
(1)先将数组的第一个值作为基准数;
(2)从右往左找一个比基准数小的数q;(必须先从右往左)
(3)从左向右找一个比基准数大的数p;
(4)然后交换p和q;循环上述操作;
(5)用p和q相遇的元素和基准数交换;
(6)然后用中间的数将其分为两个小数组;重复操作;
eg:快速排序法;
程序:
(1)选择排序法
程序:
(2)冒泡排序法
程序:
(3)用二分法查找数组中的元素;
练习:
(1)用插入法排序;
程序;
(2)使用一对迭代器,并采用函数递归调用的方式实现二分查找, int *binaryFind(int *begin, int *end, int n);
程序: