嵌入式学习Day13---C语言提升

目录

一、二级指针

1.1.什么是二级指针 

2.2.使用情况 

2.3.二级指针与数组指针 

二、指针函数

2.1.含义 

2.2.格式

2.3.注意

2.4.练习

 三、函数指针 

3.1.含义

3.2.格式

3.3.存储

3.4.练习

 ​编辑

四、void*指针 

4.1.void缺省类型

4.2.void*

 4.3.格式

4.4.注意点

五、构造类型

5.1.结构体

        1.定义 

         2.变量的定义 

        3.成员的访问

5.2.共同体(联合体)

5.3.枚举 

六、总结


一、二级指针

1.1.什么是二级指针 

        指向指针的的指针

2.2.使用情况 

        1.当函数内部想要修改外部的指针变量时,传入二级指针参数才能修改;

        2.指针数组的数组名是指向指针数组得一个元素的指针也就是二级指针;

2.3.二级指针与数组指针 

        1.指针数组传参时传的是二级指针和长度

        2.二维数组传参时传的是数组指针和长度

二、指针函数

2.1.含义 

        指针函数是函数,返回值是指针 ;

2.2.格式

int *fun(int x, int y);

2.3.注意

        指针函数不能返回局部变量的地址 

  1 #include <stdio.h>                                                          2 3 char *fun(void)4 {5     char str[32] = {"hello world"};6 7     return str;8 }9 10 11 int main(void)12 {13 14     char *p = NULL;15 16     p = fun();17 18     printf("p = %s\n", p);19 20     return 0;21 }

 

 由于str[32]属于局部变量在执行完fun函数后,空间就被回收了。

2.4.练习

        自己定义一个指针函数,来实现字符串的复制。

#include <stdio.h>char *MyStrCpy(char *pstr, char *pdst)
{char *pp = pstr;while(*pdst != '\0'){*pstr = *pdst;pstr++;pdst++;}*pstr = '\0';return pp;
}int main(void)
{		char str[32] = {0};char dst[32] = {0};MyStrCpy(str, "hello world");MyStrCpy(dst, MyStrCpy(str, "hello world"));printf("str = %s\n", str);printf("dst = %s\n", dst);return 0;
}

 三、函数指针 

3.1.含义

        函数指针是指针,指向一个函数 

3.2.格式

int (*fun)(int, int);

3.3.存储

        占8字节,因为任何指针都占8字节

3.4.练习

        使用函数指针来完成,由使用者意的愿来实现降序还是升序来实现冒泡排序 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int InPutNum(int *p, int len)
{int i = 0;srand(time(NULL));for(i = 0; i < len; i++){p[i] = rand() % 200 -100;}return 0;
}int OutPutNum(int *p, int len)
{int i =0;for(i = 0; i < len; i++){printf("%d ", p[i]);}printf("\n");return 0;
}int BullSort(int *p, int len, int (*pfun)(int, int))
{int i = 0;int j = 0;int tmp = 0;for(j = 0; j < len-1; j++){for(i = 0; i < len-1-j; i++){if(pfun(p[i], p[i+1]) > 0){tmp = p[i];p[i] = p[i+1];p[i+1] = tmp;}}}
}int aso(int x, int y)
{if(x > y){return 1;}return 0;
}int des(int x, int y)
{if(x < y){return 1;}return 0;
}int absdes(int x, int y)
{if(abs(x) < abs(y)){return 1;}return 0;
}int main(void)
{int a[5] = {0};InPutNum(a, 5);OutPutNum(a, 5);BullSort(a,5,absdes);OutPutNum(a, 5);return 0;
}

 

四、void*指针 

4.1.void缺省类型

4.2.void*

        只表示类型地址,没有指向空间大小的含义;

        主要用于函数传参和返回值使用;

 4.3.格式

void *p = 0x2000;

4.4.注意点

        char *、int *、double * 转换为void *时需要强制类型转换

         void *转换为char *、int *、double *不需要强制类型转换; 

五、构造类型

5.1.结构体

        1.定义 

struct 结构体名 {数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;...};

         2.变量的定义 

数据类型(struct 结构体名)   变量名;  变量的类型取决于结构体中的成员变量的类型

        3.成员的访问

  .  :结构体变量类型访问成员变量-> :结构体指针类型访问成员变量 

5.2.共同体(联合体)

5.3.枚举 

六、总结

        2024年7月25日,嵌入式学习第13天。今天终于是结束了指针的所有知识,开始了构造类型的学习,C语言的学习也快要结束了。指针总体偏难,还有待加强学习。

        加油! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H3CNE(OSPF动态路由)

目录 7.1 静态路由的缺点与动态路由分类 7.1.1 静态路由的缺点 7.1.2 动态路由的分类 7.2 OSPF基础 7.2.1 OSPF的区域 ​编辑 7.2.2 Router-id 7.2.3 开销-Cost or Metric 7.2.4 路由转发 7.3 OSPF邻居表建立过程 7.3.1 五种包 7.3.2 建立邻居表的第一步 7.3.3 邻居建立…

模拟实现短信登录功能 (session 和 Redis 两种代码实例) 带前端演示

目录 整体流程 发送验证码 短信验证码登录、注册 校验登录状态 基于 session 实现登录 实现发送短信验证码功能 1. 前端发送请求 2. 后端处理请求 3. 演示 实现登录功能 1. 前端发送请求 2. 后端处理请求 校验登录状态 1. 登录拦截器 2. 注册拦截器 3. 登录完整…

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中&#xff0c;当消息的生产者将消息生产完成之后&#xff0c;并不会直接将生产好的消息直接投递给消费者&#xff0c;而是先将消息投递个中间的服务&#xff0c;通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…

C++里memset的使用

在C中使用memset函数涉及几个关键点&#xff0c;‌包括函数的正确调用方式、‌参数的理解以及注意事项。‌memset函数是C和C语言标准库中的一个函数&#xff0c;‌用于将内存区域设置为特定的值。‌它的基本语法如下&#xff1a;‌ void *memset(void *s, int c, size_t n); …

集合论与存在性证明问题的分类

集合论是数学的一个重要分支&#xff0c;主要研究集合及其性质、关系以及操作等。关于集合论与存在性证明问题的分类&#xff0c;可以从多个角度进行阐述。 一、集合论的分类 基础集合论 研究集合的基本概念和性质&#xff0c;包括集合的定义、集合的元素关系、集合的操作、…

昇思25天学习打卡营第19天|DCGAN生成漫画头像

DCGAN生成漫画头像总结 实验概述 本实验旨在利用深度卷积生成对抗网络&#xff08;DCGAN&#xff09;生成动漫头像&#xff0c;通过设置网络、优化器以及损失函数&#xff0c;使用MindSpore进行实现。 实验目的 学习和掌握DCGAN的基本原理和应用。熟悉使用MindSpore进行图像…

网络协议一 : 搭建tomacat,intellij IDEA Ultimate 的下载,安装,配置,启动, 访问

需要搭建的环境 1.客户端--服务器开发环境 客户端&#xff1a;浏览器&#xff08;HTMLCSSJS&#xff09; 服务器&#xff1a;JAVA 1.安装JDK&#xff0c;配置JAVA_HOME 和 PATH 2.安装Tomcat 3.安装IDE--intellij IDEA Ultimate 是旗舰版的意思。 2.TOMCAT 的下载和解…

文件操作相关的精讲

目录&#xff1a; 思维导图 一. 文件定义 二. 文件的打开和关闭 三. 文件的顺序读写操作 四. 文件的随机读写操作 五. 文本文件和二进制文件 六. 文件读取结束的判断 七.文件缓冲区 思维导图&#xff1a; 一. 文件定义 1.文件定义 C语言中&#xff0c;文件是指一组相…

Flutter 生命周期介绍与使用

Flutter 生命周期简介与使用 Flutter 是一个由 Google 开发的开源 UI 软件开发工具包&#xff0c;用于跨平台应用程序的开发。了解 Flutter 的生命周期对于构建高效且响应式的应用程序至关重要。在这篇博客中&#xff0c;我们将探讨 Flutter 的生命周期管理&#xff0c;包括 S…

Java中的二叉搜索树(如果想知道Java中有关二叉搜索树的知识点,那么只看这一篇就足够了!)

前言&#xff1a;Java 提供了丰富的数据结构来处理和管理数据&#xff0c;其中 TreeSet 和 TreeMap 是基于红黑树实现的集合和映射接口。它们有序地存储数据&#xff0c;提供高效的搜索、插入和删除操作。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

PHP表单验证邮件和URL

在PHP中验证表单中的电子邮件地址和URL地址是确保用户输入数据正确性的重要步骤。下面是一个详细的教程&#xff0c;介绍如何使用PHP来验证电子邮件和URL地址。 一、验证电子邮件地址 电子邮件地址的验证通常涉及检查字符串是否符合电子邮件的标准格式。虽然完全通过正则表达…

web基础,http协议,apache概念及nginx

一、web相关概念 Web&#xff0c;全称World Wide Web&#xff0c;通常简称为WWW、Web或万维网&#xff0c;是一个基于超文本和HTTP&#xff08;超文本传输协议&#xff09;的、全球性的、动态交互的、跨平台的分布式图形信息系统。它起源于1989年&#xff0c;由英国科学家蒂姆…

Doris-接入能力

1. Doris数据入库功能特性2. Doris 数据写入流程图3. 常用组件写入功能特性对比 3.1. IDU实现方式对比3.2. 写入速度对比

文本编辑三剑客(grep)

目录 正则表达式 元字符 grep 案例 我在编写脚本的时候发现&#xff0c;三个文本编辑的命令&#xff08;grep、sed、awk&#xff0c;被称为文本编辑三剑客&#xff0c;我习惯叫它三巨头&#xff09;用的还挺多的&#xff0c;说实话我一开始学的时候也有些懵&#xff0c;主要…

云 IDE 你了解多少

IDE&#xff08;Intelligent Development Environment&#xff09; 对于软件开发者来说&#xff0c;是一个非常重要的工具。好用的 IDE 可以大幅提高开发效率&#xff0c;减少不必要的重复工作。 就目前而言&#xff0c;本地的 IDE 可能依然是主流的选择。但是&#xff0c;在本…

Rust 程序设计语言学习——智能指针

智能指针&#xff08;smart pointers&#xff09;是一类数据结构&#xff0c;它们的表现类似指针&#xff0c;但是也拥有额外的元数据和功能。智能指针的概念并不为 Rust 所独有&#xff1b;其起源于 C 并存在于其他语言中。Rust 标准库中定义了多种不同的智能指针&#xff0c;…

(史上最全的)Spring6框架学习教程

一、什么是Spring 1.javaWeb框架发展史 1、ServletJSPJavaBean(跳转页面、业务逻辑判断、数据库查询) 2、MVC三层架构(M Model pojo(User)V-view(USP)C-(controller-servlet)) (web-跳转页面service-业务逻辑判断 new UserService0;dao-数据库查询 new UserDao(); ) 3、使用…

二、八、十、十六进制介绍及相互转换

目录 1、引言&#xff1a; 2、进制介绍及区分 2.1 介绍 2.2 区分 2.3 各进制的数字组成 3、2进制与10进制 3.1 十进制的介绍 3.2 二进制的介绍 4、2进制与10进制的转换 4.1 二进制转十进制 4.2 十进制转二进制 5、8进制和16进制 5.1 八进制的介绍 5.2 十六进制的介…

告别抠图烦恼,1秒搞定100张图片背景更换!

想象一下&#xff0c;你手头有几十张甚至上百张证件照需要从白底换成蓝底&#xff0c;而你只能用Photoshop一张张抠图&#xff0c;调整&#xff0c;然后保存。这个过程不仅耗时&#xff0c;还容易出错&#xff0c;特别是当你急需处理大量图片时&#xff0c;简直让人抓狂。 千鹿…

“云+端”体系覆盖590余所学校,张家口如何建设“教育一朵云”?

当将装有小苏打的气球套在装有白醋的塑料瓶瓶口时,一场令人惊叹的化学反应开始上演——瓶内瞬间白雾腾起弥漫,气泡翻滚不息,气球逐渐吹了起来......这是在张家口教育云平台上的由学生及家长上传的关于“小苏打吹气球”的科学实验视频,而学生们与家长参与的便是张家口市中小学云…