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

【嵌入式C语言】07.二级指针+函数

一、二级指针

1.概念

概念:二级指针也是个指针,该指针用来存放另外一个一级指针在内存中的地址(指向指针的指针)

二级指针解引用一次,变成一级指针

2.定义二级指针

int a=88;

int *p=&a;

int **q=&p;

3.使用二级指针

*q --》二级指针解引用一次,结果是*&p--》p

**q --》二级指针解引用两次,结果是**&p--》*p--》a

二、函数的基本概念

1.概念

函数是用来处理问题的一段代码,我们把代码封装起来变成了函数,函数提高了代码的复用性

2.定义函数

返回值类型 函数名字(形参列表)

{

函数的具体代码

}

写法一: 把函数的声明和定义都写在主函数的前面

写法二: 函数的声明放在主函数的前面,函数的定义放在主函数的后面

写法三: 函数的声明放在主函数的前面,函数的定义放在单独的.c文件中

3.函数的使用(调用)

语法规则:函数名字(实参);

4.函数调用的过程分析

总结:函数调用的时候自动入栈,函数执行完毕,自动出栈

5.实参和形参之间的关系

1.我关于传值和传递值的理解

(1)实参和形参拥有各自独立的地址空间

(2)实参赋值给形参有两种

传值:实参把自己的值拷贝一份给形参

传地址:实参把自己的地址赋值给形参

(3)实参和形参同名,可以同名,但是毫无关系,各自独立

6.全局变量和局部变量

6.1 概念

全局变量:在所有函数的外面定义的变量就是全局变量,全局变量整个.c文件以及其他.c文件都可以使用(全局变量的作用域是文件作用域)。任意一个函数修改全局变量,整个程序里后续所有函数使用的都是修改后的值

局部变量:在函数花括号内部定义的变量都是局部变量

局部变量只能在定义它的那个函数内部使用,其它地方不可以使用(局部变量的作用域是局部作用域)

专业术语:作用域(变量的作用范围)

6.2 全局变量跟局部变量同名

局部变量跟全局变量同名,此时局部变量会隐藏全局变量,导致全局变量无法使用

6.3 初始化

全局变量没有初始化,默认都是0

局部变量没有初始化,默认是随机数

7.函数的返回值和形参

返回值只有如下三种情况

第一种:没有返回值 void

第二种:返回普通变量类型

第三种:返回指针,一定不可以返回局部变量的地址

原因:局部变量的作用域只是在定义它的函数中生效,当函数退出的时候,该局部变量(栈空间)的地址空间会被自动释放

如果是返回局部变量的值,是没有问题的(编译器会把局部变量的值备份一份到寄存器中),返回的就是寄存器里面的那个备份值

形参只有三种情况

第一种:没有形参 int fun(){ }

第二种:有形参,普通变量--》实参传值给形参

第三种:有形参,指针--》实参传地址给形参

8.数组作为函数的形参

8.1 一维数组作为函数的形参

int a[10]={56,89,10};

int fun(int buf[10]) //写法一

int fun(int *p) //写法二

8.2 二维数组作为函数的形参

int a[3][4]={56,89,10};

int fun(int buf[3][4]);

int fun(int *p,int n1,int n2);

8.3 任何数组作为函数的形参,求大小

任何数组作为函数的形参,sizeof()求大小都是当成指针来求大小

数组作为函数的形参时会退化为指针

http://www.jsqmd.com/news/1132058/

相关文章:

  • Unity UGUI ScrollRect 与 Mask 组合:5个高级交互效果实现(含惯性/回弹)
  • AI CLI 流式渲染:边输出边保存,别只顾炫酷
  • 第18周周报
  • 你的 AI Agent 会在服务器上“修仙“——OpenClaw.NET 长持久会话技术解读
  • x64dbg 逆向实战:3步定位小程序密码验证逻辑并绕过(附修改汇编指令)
  • 豆包和通义千问智能体突遭下线——AI拟人化监管正式落地,影响有多大?
  • 入驻 APA 大湾区模型秀能接触哪些精准客群?
  • VIA键盘配置工具:3个场景教你打造专属机械键盘工作流
  • 本周液冷五件事 #6(6/29—7/5)
  • Windows C++编译 Paddle Inference 3.5.0 GPU 版本完整指南
  • 通信与接口协议面试七、RS232
  • Dragonfly2安全机制深度剖析:TLS证书与OAuth2访问控制实战
  • 卡梅德生物技术快报|构建噬菌体肽库:全质粒 PCR 克隆优化、NGS 序列偏倚分析与淘选数据定量解析
  • 某次热身赛re方向wp
  • MySQL库与表的操作
  • 在成都买翡翠,不同段位该去哪家店
  • 3步彻底解决Sublime Text中文乱码:ConvertToUTF8插件终极解决方案
  • 9大网盘直链解析工具:开源解决方案如何提升工作效率300%
  • TD3 vs SAC vs DDPG:3 种连续控制算法在 5 个 MuJoCo 任务上的性能对比
  • openEuler 22.03 LTS 配置华为云镜像源:3步完成并验证可用性
  • GPT-4o 翻译质量评测:8篇大学英语课文英译中,BLEU得分与人工评估对比
  • C盘红了不敢乱删?这个开源工具让AI帮你判断哪些文件夹能删
  • MacBook Pro 2016-2018款屏幕排线设计缺陷深度解析:从Flexgate到服务计划
  • NVIDIA 驱动 551.86 与 CUDA 12.4 版本匹配指南:Windows 深度学习环境搭建避坑 3 要点
  • VS2019中添加md文件查看功能
  • 飞轮自驱:机器人如何以世界为食,实现永不停歇的自我进化?
  • C# GeneratedRegex:面向对象语言的“底层性能突围
  • 从零实现一个网络防火墙:包过滤与状态检测
  • DeepSeek-Translator v2 API 实战:3步调用实现《大学英语》课文批量英译中
  • 2026年想找专业靠谱的外墙保温装饰一体板供应商 看这几点就够了