在上一篇文章中,小编对数据类型进行了详细的讲解与剖析,所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩,来波鸡汤,学习一定不能着急,无法一下就学明白的知识我们需要给他时间,一定不要在一个知识点上死磕,让大脑缓一缓,有些知识是要等到知识积累到一定的程度才能够学会的。
1. 变量
1.1 变量的创建
上篇文章中我们深度学习了数据类型,那我们为什么学习数据类型呢?因为数据类型是用来创建变量的;变量是什么呢?在C语言中,把经常变化的值称为变量,不变的值称为常量。下面给各位读者展示创建变量的语法形式:
data_type name;| || |
数据类型 变量名int age; //整型变量的创建
char ch; //字符变量的创建
double weight; //浮点型变量的创建
在创建变量的时候就给定一个初始值,这样的操作叫做初始化:
int Age = 18;
char c = 'k';
double weight = 75.0;
unsigned int height = 181;
需要强调的一点是,在我们创建变量的时候一定要记得去初始化;在VS2022中十分严谨,未经过初始化的变量是不允许使用的;一个变量在未初始化状态下,它的值是一个随机值,下面小编就给大家附上图片供读者参考:
这是两个同编译器下未初始化本地变量得到的随机值,我们总结一下:创建变不初始化得到的随机值,取决于我们所使用的编译器,VS2022 x64环境下,我们通过F10/F11这两个键可以进入调试环节,观察发现整型变量a未初始化得到的是整数597;而在Dev c++环境下,整型变量a未初始化得到的是整数1389922;这也证明了变量初始化的重要性。
1.2 变量的分类
1.2.1 全局变量
在所有函数外部(包括主函数)定义的变量就是全局变量,全局变量的使用范围更广,想在整个工程中使用都是可以的,下面给大家附上代码:
#include <stdio.h>char global_variable = 'g'; //在所有函数外部定义的变量就是全局变量void function()
{//在自定义函数内部可以直接使用全局变量printf("The value of the global variable in function: %d\n", global_variable);
}
int main()
{function();// 在主函数中同样可以直接使用全局变量printf("The value of the global variable in main: %c\n", global_variable);return 0;
}
在上述的代码块中,global_variable就是全局变量,它在主函数以及其他函数中都是可以被直接访问和使用的,全局变量的作用域是从它的定义点开始,一直到整个源文件结束。这意味着在同一个源文件内,定义点之后的所有函数都可以直接访问该全局变量;全局变量的生存期是整个程序的运行期间。也就是说,从程序开始运行,全局变量就被创建并占用内存空间,直到程序结束运行,它所占用的内存才会被释放。
全局变量的优点:由于其作用域广泛,多个函数可以很方便地共享全局变量所存储的数据,无需在函数间频繁传递参数来传递相同的数据;全局变量的缺点也很明显:全局变量在整个程序运行期间都占用内存空间,即使在某些阶段这些变量暂时不需要被使用,它们仍然占据着内存,可能会导致内存资源的浪费,尤其是在内存资源有限的情况下。
1.2.2 局部变量
局部变量是在函数内部定义的变量。它的定义位置只能在函数体内部,包括在函数的复合语句内定义的变量也属于局部变量,局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用,下面给大家附上代码:
#include <stdio.h>void function()
{char local_variable = 'x'; //在function1函数内定义的变量就是局部变量printf("The value of the local variable in function: %c\n", local_variable);
}int main()
{function();//在主函数中无法访问function函数内定义的局部变量//因为局部变量的作用域仅限于定义它的函数体内部return 0;
}
在上述的代码块中,local_variable就是定义在function( )函数内部的局部变量,它只能在function()内部被访问和使用,局部变量的作用域仅限于定义它的函数内部。也就是说,一旦离开了定义该局部变量的函数体,就无法再访问这个局部变量了。局部变量的生存期是从它被定义的那一刻开始,到定义它的函数执行完毕结束。当函数执行完毕后,局部变量所占用的内存空间会被立即释放,以便为其他程序部分腾出内存。
局部变量的优点:避免了命名的冲突,由于局部变量的作用域仅限于所在函数内部,所以不同函数可以使用相同的变量名来定义局部变量,而不会产生命名冲突。局部变量在函数执行完毕后就会被释放内存,不会像全局变量那样在整个程序运行期间一直占用内存,这样可以更有效地利用内存资源。但是局部变量也是有缺点的,因为局部变量的作用域有限,不同的函数之间不能很好的进行数据的共享,需要通过传参和返回值等方式实现,这增加了程序的复杂性。
1.2.3 全局变量在内存中的存储
我们在学习C/C++语言的时候,会关注内存的三个区域:栈区、堆区、静态区。小编今天简单给大家介绍一下,不进行太过复杂的讲解,其实内存区域的划分会更加细致,以后在操作系统的相关知识的时候会给读者们详细介绍。
局部变量存储在内存中的栈区,全局变量存储在内存中的静态区,堆区是用来做动态内存管理的(后期会给大家详细介绍)。
2.强制类型转换
有一种特殊的操作符是强制类型转换,他的语法形式很简单:
(类型)
那我们如何去使用呢?演示如下:
int a = 3.1415926;
//a的是int类型, 3.1415926是double类型,赋值操作符左右两边的数据类型不一致,编译器会报警
为了消除这个警告,我们可以使用强制类型转换:
1 int a = (int)3.1415926;//将3.1415926强制类型转换为int类型,这种强制类型转换只取整数部分
有句话叫做:强扭的瓜不甜,不到万不得已的时候我们最好不要使用强制类型转换,如果能不使用强制类型转换就实现代码更好。
3. 结语
小编希望本篇文章能够给读者带来一些帮助,如有写的不好的地方,还望读者们多提意见、分享观点,如果读者能理解本篇文章的内容,将会使得C语言的学习更加的轻松。