day16-指针IV

一、 指针函数

  • 返回值是指针的函数
  • 注意:绝对不能返回局部变量的地址,因为使用后空间会销毁
  • 但在局部变量前可加static或定义全局变量或返回传入的某指针

1.1 动态内存分配

1.1.1 malloc函数

void *malloc(size_t size);
void free(*ptr);
  1. malloc保证申请的这段空间一定是连续的
  2. 使用时,加头文件#include<stdlib.h>
  3. 通过free函数销毁
  4. 使用前,判断malloc是否申请到空间,若未其返回为空指针
  5. 接收首地址的指针,若要变化,将指针备份
  6. free释放后,将指针置为空,避免野指针出现

1.1.2 realloc函数 

        void *realloc(void *ptr, size_t size);

  1. 重新开一段空间,将原来内容拷贝,并释放原来的内容;
  2. 用于扩容或缩容
  3. 主程序结束时,垃圾回收器会回收未释放的指针,但仅适用于有操作系统,不适用于裸机程序

1.1.3 calloc函数

void *calloc (size_t nmemb,size_t size)

//int *p = malloc(10 * sizeof(int));
int *p = calloc(10, sizeof(int));

1.1.4 reallocarray函数

void *reallocarray(void *base, size_t nmemb, size_t size)

二、 函数指针

2.1 语法 

        首先,写函数声明,去掉函数名,在去掉的位置加(*p)

        如: int (*p)(int ,int) // 此时p指向一类两个整形作为参数且返回值为int型的指针

        函数的函数名为该函数的入口地址

2.2 作用

        降低程序的耦合性

        采用回调函数,如下图

         qsort函数也使用了回调函数,其一般形式为:

        void qsort(void *base, size_t nmemb, size_t size,

                          int (*compar)(const void *, const void *));

使用如下:

 三、 指针数组

        int *a[10];//定义了十个指针,放于一个数组

        作用:

        int main(int argc, char *argv[])

        {

                return 0;

        }

四、 指针指针

  • 称为二级指针
  • 函数实参是一个指针数组,形参是指针的指针

口诀:二维数组作为函数参数,形参为指向数组的指针

           指针数组作为函数参数,形参为指向指针的指针

例题:

1.指针数组打印

2.指针数组逆序

3.指针数组排序

4.指针数组查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值