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

嵌入式学习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.lryc.cn/news/409195.html

相关文章:

  • Mysql随记
  • wire和reg的区别
  • c语言第四天笔记
  • Hive——UDF函数:高德地图API逆地理编码,实现离线解析经纬度转换省市区(离线地址库,非调用高德API)
  • 深入解析PHP框架:Symfony框架的魅力与优势
  • Go语言实战:基于Go1.19的站点模板爬虫技术解析与应用
  • 5个ArcGIS图源分享
  • 科普文:万字梳理31个Kafka问题
  • Unity UGUI 实战学习笔记(4)
  • Python学习和面试中的常见问题及答案
  • Mysql-索引视图
  • 电子签章-开放签应用
  • Ubuntu下设置文件和文件夹用户组和权限
  • JavaSE从零开始到精通(九) - 双列集合
  • 探索 OpenAI GPT-4o Mini:开发者的高效创新工具
  • 藏文词典查单词,藏汉双语解释,推荐使用《藏语翻译通》App
  • 【机器学习基础】初探机器学习
  • SpringBoot轻松实现多数据源切换
  • Qt 5 当类的信号函数和成员函数,函数名相同时,连接信号和槽的写法。
  • Vuex 介绍及示例
  • 【elementui】记录如何重命名elementui组件名称
  • MySQL面试篇章—MySQL锁机制
  • OAK相机支持的图像传感器有哪些?
  • 网络安全威胁情报是什么,它对代工生产(OEM)意味着什么?
  • 【基础篇】Docker 架构与组件 TWO
  • 03。正式拿捏ArkTS语言第一天
  • 【PyTorch][chapter 27][李宏毅深度学习][attention-3]
  • java-数据结构与算法-02-数据结构-05-栈
  • Python 管理依赖包(pip, virtualenv)
  • Bigdecimal 导出为excel时显示未0E-10,不是0,怎么解决