指针变量初始化:
如果指针变量没有初始化,此时是随机值------野指针
初始化可以让指针变量 有明确指向
初始化:
int a=10;
int *p=&a;
int * p=NULL (NULL是0号地址)-----空指针
赋值:
int * p;
p=NULL;
int a;
int * p;
p=&a;
int *p ,q;-----p是指针类型 q是int型
int *p,*q------此时表示定义了两个 int*类型的变量 p和q
注意:定义时候的 * 修饰变量名的 表示定义的是一个指针类型的变量
为什么需要指针?
被调修改主调
要实现被调修改主调:
1.指针作为函数参数
形参---指针类型变量 ,用来接受实参(实参是要操作的内存空间的地址)
实参---要修改谁,就把谁的地址传过去
-----要保证 空间有效
注意:被调函数中 一定要有 *p 运算(间接访问的操作)
值传递 只是实参数据 赋值了形参
地址(指针)传递 传的是地址---可以实现被调修改主调
---------------------------------------------------------------------------------------------------------------------------------
指针+ 一维整型数组
int a [ 5 ]; 一维整形数组
数组名
----类型----数据类型 int [ 5 ]
-----值 ----- 数组首元素的地址---常量
数组名是个常量 不能做自增自减
1.定义一个什么类型的指针变量?
int *p=a;
int * p= &a[0];
2.谁能代表数组所在空间的首地址?
数组名---数组首元素的地址
这个地址值的类型
a<=>&a[ 0 ]
-----a[ 0 ]的数据类型---int 型
------&a[ 0 ] 地址的类型--- int *
int * p=a ; 表示p指向了数组a;
* p <=>a[0]
指针的运算:
&
*
p+1---- 加n 表示跳过了 n个基类型
p-1
p++
p--
指针比较 > >= < <= == !=
p - q -----表示差了多少个元素(基类型)
-----必须是同一类型的指针
p+q ----不行
int *p;
p的类型 int *
&p 获得地址
* (p+i)<=> a[ i ] <=> *(a+i)
数组作为函数参数 :
形参---数组形式 ---本质上是一个指针类型变量
int *a
数组长度 int len
实参----数组名
数组名代表数组首地址
数组长度
迭代-----描述过程
快速排序:
思想:
分而治之
实现思路:
1.基准值---数组元素a[0];----基准值位置
2.end从右边开始,找到第一个比基准值小的数
3.begin从左边开始,找到第一个比基准值大的数
4.将找到这个数交换 ,继续重复2—4的过程,直到begin/end 相遇此时结束
5.将基准位置上的值 与此时 begin/end 所处位置的元素交换
6.继续对做一半和右一半进行快速排序
练习:四种排序 指针的方法 数组的最大值 逆序 交换位置