指针以及快速排序

野指针:未初始化的指针

int *p = NULL;//空指针,地址为0

指针赋值:

int *p;

p = NULL;

int *p,*q;//表示定义多个指针变量

int *p,q;//p是指针类型,q是int类型

为什么需要指针?因为可以被调修改主调

要实现被调修改主调:

指针作为函数参数

形参:指针类型变量,用来接收实参(实参是要访问的内存空间的地址)

实参:要修改谁,就把谁的地址传过去

        注意:被调函数中一定要有 *p运算

值传递:只是实参数据赋值了形参

地址传递:要改变的变量要传地址过来,但是要保证空间有效

*p 间接访问的步骤:

1.首先拿出p中的地址到内存中定位

2.偏移出基类型大小的一块空间

3.将偏移出的这块空间当作一个基类型变量来看

指针+一维数组

1.定义指针变量

int *p = a;//数组名a代表的是数组的首地址,表示p指向数组a

int *p = &a[0];

数组名是常量,不可进行运算操作

指针的运算:

&

*

p + 1 //表示跳过了1个基类型

p - 1

p++

p--

指针比较:

p - q //表示相差几个基类型且是同一类型的指针

p + q p *q p/q //无实际意义,会报错

int a[5];

int *p = &a[0];

* &可以抵消 *&p = p

但是&*p 为a[0]的值的地址

*(p + i) <=> a[i] <=>*(a + i)

a[i] = *(a + i)

i[a] = *(i + a)

数组作为函数参数

        形参:数组形式//本质上是一个指针类型变量

        实参:

快速排序的实现思路:

1.将数组首元素a[0]作为基准值,首位地址为begin,末位地址为end

2.end从右边开始找,找到第一个比基准值小的数字

3.begin从左边找,找到第一个比基准值大的数字

4.将找到的这两个数字交换

重复2~4的过程,直到begin与end相遇,此时结束

5.将基准位置上的值与此时begin.end上的值交换

6.继续对基准值左一半和右一半分别快速排序

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值