嵌入式初学-C语言-十八

#接嵌入式初学-C语言-十七#

变量的生命周期

  1. 概念:变量在程序运行中存在的时间

  2. 根据变量存在的时间不同,变量可分为静态存储和动态存储

  1. 变量的存储类型

变量的完整定义格式:存储类型 数据类型 变量列表;

  1. 存储类型

auto:存储类型只能修饰局部变量,被修饰的局部变量,是存储在动态存储区的,auto也是局部变量默认的存储类型

static:修饰局部变量,局部变量就会从动态存储区到静态存储区。局部变量的生命周期被延长,但是作用域不发生改变;修改全局变量,全局变量声明周期不变,但作用域被衰减,一般限制全局变量,只能在本文件内

extern:外部存储类型,只能修饰全局变量,此全局变量可以被其他文件访问,相当于扩展了全局变量的作用域;extern修饰外部变量,往往是外部变量进行声明,声明该变量是在外部文件中定义的,不是变量定义

register:寄存器存储类型,只能修饰局部变量,用register修饰的局部变量会直接存储到cpu的寄存器中,往往将循环变量设置位寄存器存储类型

值传递与引用传递

值传递:发生在整型、浮点型、字符型,数据传递,传递的是数值,也就是内存空间只能被当前变 量独享。

引用传递:发生在数组、指针、结构体..,数据传递,传递的是地址值,也就是内存空间可以被多 个变量共享。

cs 复制代码
// 值传递(整型、浮点型、字符型..)
fun(int x)
{
    printf("%d\n",x); // x = 10
    x = 20; // x = 20
}

main()
{
    int a = 10; // a = 10
    fun(a);

    printf("%d\n",a);// a = 10
}
-------------------------------------------------------------------------------------
// 引用传递(数组、指针、结构体..)
fun(int x[10])
{
    printf("%d\n",x[9]);// x[9] = 0
    x[9] = 20; // x[9] = 20
}

main()
{
    int a[10] = {1,2,3};
    fun(a);

    printf("%d\n",a[9]);// a[9] = 20
}

内部函数和外部函数

内部函数

使用static修饰的函数,只能在当前文件中调用

外部函数

使用extern修饰的函数,extern是默认的可以不写,本质上我们写的函数都是外部函数,建议在被其他文件调用的时候,在其他文件声明的时候加上extern

小结

  1. C语言中函数是用来完成一定功能的;

  2. C语言中有两种函数:库函数和用户自定义函数;

  3. 函数的定义和声明含义是不同;

  4. 函数处于调用它的函数之后时,要进行原型声明。函数原型声明有两种形式;

  5. 调用函数是要注意:实参与形参个数应相同、类型应一致(或兼容);数据传递是从实参到形参的单向值传递;

  6. 函数可以嵌套调用,也可以递归调用;

  7. 数组元素作实参其用法与普通变量相同,传递的是元素的值。而数组名作实参,向形参传递的是数组的首地址,而不是全部元素的值;

8.变量的作用域时值变量有效的范围。根据定义变量的位置不同,分为局部变量和全局变量;

  1. 变量的存储类别共有4个:auto、static、register、extern 前3个用于局部变量,可改变变量的生存期。 extern只能用于全局变量,可改变变量的作用域;

  2. 函数有内部和外部之分。本质上是外部的,但在其它文件调用时,要用extern对其声明。若不想让调用,应在定义时加上static,将其屏蔽起来;

11.变量的生存期是指变量存在的时间。全局变量的生存期是程序运行的整个期间,局部变量则不同。Static类为程序运行的整个期间, auto和register则与所在函数调用的时间段相同,函数调用结束就不存在了;

相关推荐
智闲电子设计1 分钟前
RS485 总线实战:终端电阻、差分信号、半双工方向控制,工程里最容易翻车的几处
c语言·stm32·单片机·嵌入式硬件
Ivanqhz5 分钟前
图是“拓扑 + 类型 + 形状“的世界
算法·决策树·机器学习·php·集成学习
上官唐云7 分钟前
2024届本科 | C++ Linux服务端开发求职:从嵌入式到底层服务端的技术之路(附开源项目+简历)
linux·c++·开源·求职招聘
云雀衔光12 分钟前
Java Spring AI MCP:在 Spring 里把 AI 接上你的业务系统
java·开发语言·人工智能·后端·测试工具·spring
小白说大模型13 分钟前
去AI味提示词大全:25个实用Prompt帮你降低AI率
大数据·人工智能·pytorch·深度学习·机器学习·prompt
Zucker n14 分钟前
Ubuntu24.04结合ollama本地使用Hermes
linux·ubuntu
重生之小比特15 分钟前
【Java SE】数据类型与变量
java·开发语言·python
find1star16 分钟前
LeetCode 54:螺旋矩阵——用四个边界模拟矩阵收缩
java·算法·leetcode·边缘计算·学习方法
Yeniden18 分钟前
Java 后端从零到企业级:第1篇 Java 基础语法——变量、数据类型与运算符
java·开发语言·apache
邪修king19 分钟前
Linux系统篇(二十三) 基础 IO:从“文件”到“文件描述符”,彻底理解重定向
android·java·linux