嵌入式开发学习日志Day16

一、指针函数

        函数的返回值为指针的函数;

        注意:不能返回局部变量的地址;

                    可以返回静态变量的地址;

                    可以返回全局变量的地址;

1、动态内存分配

void *malloc(size_t size); //申请空间的函数
void free(*ptr);           //销毁申请的空间

【malloc】:在申请到的地址在内存空间上是连续的;申请的地址是没有被初始化的;

                        使用时包含头文件【#include <stdlib.h>】

                        如果没有申请到地址的话返回为【NULL】;

                        接收首地址的指针,若要变化,将指针备份;

                       free释放后,将指针置为空,避免野指针出现;

eg:(1)申请一个空间,将数组s中元素拷贝在申请的空间中 输出后销毁空间;

程序:

(2)将数组s和t拷贝在新开辟的空间中;

程序:

2 、realloc函数 

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

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

 3、 calloc函数

void *calloc (size_t nmemb,size_t size)
 
//int *p = malloc(10 * sizeof(int));
int *p = calloc(10, sizeof(int));

 4、 reallocarray函数

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

二、 函数指针

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

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

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

2.2 作用
        降低程序的耦合性

      eg:

(1)  采用回调函数,打印出可以被三整除的数

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

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

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

eg:

(2)快速排序浮点型的数组;

程序:

 三、 指针数组
     

                  int *a[10];//定义了十个指针

                       作用:

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

                                        {
                                                return 0;

                                        }

eg:

(1)找出字符串中的最大值;

程序:

四、 指针指针

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

        eg:

(1)数组的遍历;

程序:

(2)逆序输出

程序:

                 第二种,用swap交换;

(3)数组的排序:

程序:

 (5)二分查找法进行查找;

 五、练习

编写程序实现单词的倒置 "how are you" -> "you are how"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值