当前位置: 首页 > ops >正文

嵌入式开发学习日志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"

http://www.xdnf.cn/news/4793.html

相关文章:

  • MAC电脑日期与时间问题和定位不能正常使用问题
  • mysql数据库体验
  • 国标GB28181软件EasyGBS雪亮工程打造智能高效的视频监控新体系
  • git的常用命令详解
  • 【redis】分片方案
  • 一文读懂Python之requests模块(36)
  • 扣子创建一个应用
  • 基于vm加密的php逆向分析
  • verilog循环仿真
  • Spark处理过程-案例数据清洗
  • Linux命令行参数注入详解
  • 深入剖析ThreadLocal:原理、应用与最佳实践
  • 笔试强训——第七周
  • 前端三大件---CSS
  • 塔能空压系统节能方案:为华东某电子厂降耗赋能
  • JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)
  • 基于LLM的全自动视频生成工具:MoneyPrinterTurbo 技术解析
  • CAN总线通讯接口卡:工业通信的核心桥梁
  • wails3学习-runtime:Window无边框设置
  • 数据结构(四)——栈的应用—数制转换
  • Java线程阻塞方法LockSupport.park()/Thread.sleep()/Object.wait()详解:原理、区别
  • java实战(第六篇):统计投票信息
  • [特殊字符]【深圳金融科技交流会】AI大模型如何重塑资管新生态?一线实战干货来了!
  • 极简远程革命:打破公网桎梏,重塑数字生活新体验
  • Vue 3.0中Treeshaking特性
  • Nacos源码—6.Nacos升级gRPC分析二
  • 从SiC到数字孪生:PSR芯片的技术迭代与未来布局
  • windows10 系统显示mov文件格式缩略图
  • 使用Hyper-V 安装Windows11操作系统
  • 缺乏实体人形机器人的主流高精度仿真方案