指针第二部分

一、快速排序

1、先找基准数,一般指向begin 的

2、从右往左找第一个比基准数小的数

3、从左往右找第一个比基准点大的数

4、然后让此时此刻进行互换

5、循环往复。

1.1快速排序代码
}
void qSort(int *begin,int *end)
{
    if(begin >= end)
    {
        return ;
    }
    int t = *begin;
    int *p = begin;
    int *q = end;
    while(p < q)
    {
        while(p < q && *q >= t)
        {
            --q;
        }
        while(p < q && *p <= t)
        {
            ++p;
        }
        swap(p,q);
    }
    swap(begin,p);
    qSort(begin,p - 1);
    qSort(p + 1,end);
}
 二、const 的用法

1、const int i = 10;通过变量名无法直接访问,虽然不能直接访问,但是我们可以通过指针间接的访问来对其进行修改。比如:int *p = &i

注意 

  1. 无法通过自己来改变,来改变所指向的值。
  2. 无法通过指针来进行修改,变量本身可以自身修改,但是不能使用该指针来进行修改。

2、 常指针  对p 来进行修饰吗,不能进行乱指向了。 

 

三、字符串数组 
3.1 匿名数组

该数组没有名字,但是和普通数组一样。第一个字母就代表首元素。注意要看指针指向的东西能不能进行修改。根据函数的功能来选择需要加不加const,针对这种直接初始化时候就要将所指变量的地址赋好。

3.2 strcpy()与strncpy()

strncpy本质上是将另一个拷贝到另一个,只是多传了一个参数,根据参数来进行选择拷贝的个数。这个n 代表的是字节数,不是元素的个数。

上述进行++ 操作之后容易造成其指针越界,故对内容进行精简

strncpy本质上是将另一个拷贝到另一个,只是多传了一个参数,根据参数来进行选择拷贝的个数。这个n 代表的是字节数,不是元素的个数。

3.3 万能型指针 void *P 万能指针

万能指针可以接受任何类型指针的地址。

注意

万能指针不能进行指针运算,只要引用void 型,都不能

应用

主要是为了解决上述问题,针对不同类型的基类型,来实现数据接收

3.4 内存拷贝

格式要求如下

 

从内存某一个地方进行拷贝到新的地方且连续

3.5 strcmp()与 strncmp()

Strncmp()函数注意实现的,比较大小,但是可以选择要比较的个数。

3.6 特定字符串输出

3.7 指针函数

返回值为指针的函数(指针函数)

局部变量不建议使用,是因为,局部变量在创建的时候,用完也销毁,最后所指向的空间是一个野指针。

解决办法

1、全局变量

2、加static 将动态的转换为静态

指针函数要保证最后指向的空间是存在的

 3.8 malloc 函数解决内存空间问题

堆(需要程序员手动)

注意 

  1. size 是需要申请内存空间大小的字节数,申请的字节是连续
  2. 返回值是申请空间的元素的首地址
  3. malloc 申请的空间是在堆上

 

 定义了*p 栈上,可以定义几个指针指向堆上,便于操作  ;malloc申请失败(可能空间没有申请到,空间要是申请到了返回首元素指针,要是没有申请到返回空指针)

注意

  1. 释放完为野指针 ,所以在代码里面最好给其赋值为NULL指针。
  2. malloc 分配空间,两次分配,结果空间不连续。
  3. 要开辟一个更大的空间,那么再次开辟空间,把原来的代码进行拷贝,并进行销毁。
四、应用
 4.1迭代器

 好处可以选择性 的遍历输出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值