指针变量的初始化
如果指针变量没有初始化,此时是随机值 --- 野指针
初始化可以让指针变量有明确指向
初始化方式
int a=10;
int *p = &a;
int *p = NULL; //0号数组 -- 空指针
赋值
int *p;
p = NULL;
int *p,q; //p是指针类型 Int*,q是int型
int* p,q; //此时表示定义了两个int*类型的变量p和q
//注意:定义的时候*修饰变量名的表示定义的是一个指针类型的变量
指针的使用
学了指针类型,那为什么需要指针类型呢?
可以实现被调修改主调 //指针80%的用途
要实现被调修改主调
指针作为函数参数
形参 -- 指针类型变量,用来接收实参(实参是要操作的内存空间的地址)
实参 -- 要修改谁,就把谁的地址传过去 //要不在空间有效
注意:被调函数中一定要有*p运算
值传递 //只是实参数据赋值给了形参
地址(指针)传递 //传的是地址,可以实现被调修改主调
指针+一维整型数组
1.定义一个什么类型的指针变量?
int *p = a; //p指向数组a
int *p = &a[0];
2.谁能代表数组所在空间的首地址?
数组名 -- 数组首元素的地址
这个地址值的类型
a <=> &a[0]
//a[0]的数据类型 -- int型
//&a[0] 地址的类型 -- int *
int *p = a; //表示 p指向数组a
*p <=> a[0]
指针的运算
int a[10];
int *p = a;
int *q = a + 9;
p+1 //跳过了n个基类型
p-1
p++
p--
p - q //表示差了多少元素(基类型)
//必须是同一类型的指针
p + q //不行
由数组和指针的运算可得
*(p+i) <=> a[i] <=> *(a+i)
数组作为函数参数
形参 -- 数组形式 //本质上是一个指针类型变量
实参 -- 数组名 //数组名代表首地址
用指针的迭代写排序查找
选择排序
void choieSort(int *begin,int *end)
{
int *p = begin;
int *q = NULL;
for(p = begin;p < end;p++)
{
for(q = p + 1;q <=end;q++)
{
if(*p > *q)
{
swap(p,q);
}
}
}
}
冒泡排序
void bullueSort(int *begin,int *end)
{
int *p = begin;
int *q = NULL;
int *t = end;
for(p = begin;p < t;p++)
{
end--;
for(q = begin;q <= end;q++)
{
if(*q > *(q+1))
{
swap(q,q+1);
}
}
}
}
插入排序
void insert(int *begin,int *end)
{
int *q = begin;
begin++;
while(begin <= end)
{
int t = *begin;
int *p = begin;
while(t < *(p-1)&& p > q)
{
*p = *(p-1);
--p;
}
*p = t;
begin++;
}
}
二分查找
int * binaryFind(int *begin,int *end,int n)
{
int *mid = NULL;
int *ret = NULL;
mid = begin + (end - begin) / 2;
if(begin > end)
{
return ret;
}
else
{
if(*mid > n)
{
end = mid - 1;
}
else if(*mid < n)
{
begin = mid + 1;
}
else
{
ret = mid;
return ret;
}
return binaryFind(begin,end,n);
}
}
二分查找中不但使用了指针,还用了前两天所学的递归
用指针实现快速排序
快速排序思想:快速排序的基本思想是从一组数据中选取一个基准值(通常取第一个元素),然后比较其他元素与基准值的关系,将数组划分为两部分:一部分包含所有小于基准值的元素,另一部分则包含所有大于或等于基准值的元素。之后,我们分别对这两部分重复这个过程,直到最终所有的元素都排列在它们应该的位置上。
void swap(int *a,int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void quickSort(int *begin,int *end)
{
int *p = begin;
int *q = end;
int *k = begin;
if(begin>=end)
{
return ;
}
else
{
while(begin < end)
{
while(begin < end && *end >= *k)
{
--end;
}
while(begin < end && *begin <= *k)
{
begin++;
}
swap(begin,end);
}
swap(k,begin);
quickSort(p,end-1);
quickSort(begin+1,q);
}
}