📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处
文章目录
- 变量类型有哪些?
- 全局变量特点
- 全局变量的类型
- 1.普通全局变量
- 2.静态全局变量
- 3.跨文件引用全局变量(extern)
- 局部变量的类型
- 1.普通局部变量
- 2.静态局部变量(static)
- 3.寄存器局部变量
- 局部变量与全局变量的区别
变量类型有哪些?
全局变量:“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效;
局部变量:“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效;
全局变量特点
在整个文件中,所有函数都可以访问全局变量,而且访问的都是该全局变量本身。
其次,如果之前某个函数中更改了它的值,那么后面再引用时它的值就是前面那次更改后的值。
全局变量的类型
1.普通全局变量
普通全局变量就是平时使用的,定义前不加任何修饰词。普通全局变量可以在各个文件中使用(可以成为跨文件全局变量),可以在项目内别的.c文件中被看到,所以要确保不能重名。
2.静态全局变量
✨什么是静态全局变量?
静态全局变量定义时在定义前加static关键字,告诉编译器这个变量只在当前本文件内使用,在别的文件中绝对不会使用,以解决重名问题。
它具有以下特点:
1、作用域为整个文件: 静态全局变量的作用域限定在声明它的源文件中,在其他文件中无法直接访问。
静态全局变量对其他源文件是隐藏的,不会与同名变量冲突。
2、静态存储持续时间: 静态全局变量在程序执行期间始终存在,不会因为函数的调用结束而销毁。它在程序启动时进行初始化,只会分配一次内存空间,并且保留其值直到程序终止。
3、默认初始化为0:如果没有显式初始化静态全局变量, 它会被自动初始化为0。
3.跨文件引用全局变量(extern)
✨什么是跨文件引用全局变量?
在C语言中,如果你想在不同的源文件中引用和共享全局变量,你可以使用 extern 关键字来声明该变量。
局部变量的类型
1.普通局部变量
普通变量定义时直接定义,或是在定义前加auto关键字。在C语言中,普通局部变量其实就是auto int a;平时可以省略auto。
2.静态局部变量(static)
✨什么是静态局部变量?
静态局部变量是在函数内部声明的具有静态存储持续时间的变量。
✨它具有以下特点:
1、作用域限定在函数内部,只在声明它的函数中可见。
2、存在于整个程序的执行期间,即使函数调用结束,静态局部变量的值也会被保留。
3、默认情况下,静态局部变量的值在每次函数调用时不会被重新初始化。
#include <stdio.h>void function() {// 声明静态局部变量static int staticLocalVariable = 0;// 对静态局部变量进行累加staticLocalVariable++;// 输出静态局部变量的值printf("Static local variable: %d\n", staticLocalVariable);
}int main() {// 多次调用函数来展示静态局部变量的特性function(); // 输出:Static local variable: 1function(); // 输出:Static local variable: 2function(); // 输出:Static local variable: 3return 0;
}
3.寄存器局部变量
Register关键字,register翻译为寄存器,是C语言里面的一个关键字。
比如:Register int i3;
Register类型的局部变量表现上和auto是一样的,这个东西基本没用。知道就可以了。Register被称为C语言中最快的变量。C语言的运行时环境承诺,会尽快将register类型的变量放在寄存器中去运行(普通变量在内存中)。所以register类型的变量访问速度会快很多。
局部变量与全局变量的区别
1.定义同时没有初始化,则局部变量的值是随机的,而全局变量的值默认为0。
2.使用范围上:全局变量具有文件作用域,即:在整个文件里面的所有函数都可以使用。而局部变量只有代码块作用域,即:局部变量在哪个函数里面定义,就只能在这个函数内的代码块起作用。
3.生命周期上:全局变量在程序开始运行之前的初始化阶段就诞生了,到整个程序结束退出的时候才死亡;而普通局部变量在进入局部变量所在的代码块时诞生,在该代码块退出时死亡,也就是说局部变量无法传递和保留下去。
4.分配位置上:全局变量分配在数据段上,而局部变量分配在栈上。