• 掌控变量(C语言变量初步详解)


    🐰作者简介:一位普通高校的在校学生,致力于提高自己的编程能力。

    🍌个人主页:比昨天强一點的博客_CSDN博客-C语言从0到精通领域博主

    🍍系列专栏:C语言从0到精通_比昨天强一點的博客-CSDN博客

    🏷️学习格言:无人问津的日子,最是提高自己的好时机。

    本章目的:希望你能通过这篇文章练就火眼金睛,掌控变量的方方面面。


    1.什么是变量

            变量是程序猿自己命名的,用来保存数据的一个载体(准确的说应该是用来寻找数据的标识符)。

            在我们编写程序时,常常有数据需要被处理,而变量就是为了能够将数据保存起来,以便后续处理时拿出来使用。


    2.变量的定义与声明

            2.1变量的定义

            定义变量,本质上就是为变量在内存中开辟空间,换言之,同一变量的定义只能进行一次。举个栗子🌰:你想定义一个变量来记录你放了几只羊

    我要有这些羊,我还码个屁代码 

    1. #include
    2. int mian(){
    3. int a; //这就是定义变量
    4. return 0;
    5. }

            但是在这里我要讲的是,上面的做法并不推荐。

             接下来,讲讲上述代码有哪些问题

    •         在定义变量时,变量名要有意义,能见名知意。所以上述定义时,应该将a 改为 sheepNum
      • 你以为这就完了?。强烈要求,变量在定义时要初始化,也就是要给一个值。

            因为如果不初始化,变量将会是随机值,在vs中不初始化直接打印输出,编译器会报错,在linux中是随机值(或者说是默认值)。

            所以对上述代码进行修改。如下:

    1. #include
    2. int main(){
    3. int sheepNum = 0;
    4. return 0;
    5. }

            关于更多的变量命名规则,我会总结在文章末尾,各位看官可自行参考。

    2.2变量的声明

            全局变量是可以跨文件访问的,所以声明针对全局变量。

            首先我们举个栗子🌰:

    1. mian.c文件中
    2. #include
    3. int num = 0; //代码块外定义的变量就是全局变量
    4. int main(){
    5. return 0;
    6. }
    7. test.c文件中
    8. #include
    9. extern int num;//这就是声明,只有进行声明才可以使用
    10. int num; //这种其实编译运行也没问题,但是建议带上extern,因为不带让人不清楚是定义还是声明,这不是一个好习惯。
    11. extern int g_val = 100;//这是错误的写法,所有变量声明的时候不能设置初始值。
    12. int main(){
    13. num = 10; //如果要在同一个工程下的不同文件使用此全局变量,则需要进行声明。如上
    14. return 0;
    15. }

    3.变量的作用域和生命周期

    作用域的概念:该变量的有效区域

    生命周期的概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间“被释放”。

            变量的使用遵循局部优先

    • 局部变量:进入代码块,形成局部变量【开辟空间】,退出代码块,“释放”局部变量
    • 全局变量:定义完成之后,程序运行的整个生命周期内,该变量一直有效。

    举几个栗子🌰:

    1. #include
    2. int num = 10;
    3. int mian(){
    4. int num = 1;
    5. printf("%d\n",num);//输出的是1,当局部变量和全局变量同名时(允许,但不推荐),采用局部优先原则。
    6. return 0;
    7. }
    1. #include
    2. int mian(){
    3. for(int i = 0; i < 10; ++i){
    4. printf("%d\n",i); //没问题
    5. if(1){
    6. int j = 0;//j定义在代码块内,只能在此有作用。
    7. }
    8. printf("%d\n",j);//报错
    9. }
    10. printf("%d\n",j);//报错,j只在if内部有效
    11. printf("%d\n",i); //这里会报错,因为如此定义i,i的作用域只在循环体内。
    12. return 0;
    13. }

    4.变量的命名规则一般规则:(一般公司都有自己的命名规范,不用死记) 

                                                   这么多?

     

    • 命名应当直观且可以拼读,便于记忆和阅读。标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。
    • 命名的长度应当符合“min - length && max - information”原则。(最短命名传递更多的信息)
    • 每个单词第一个首字母大写(采用大小驼峰命名法)
    • 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号,比如驱动开发时为引脚命名,非编号名字反而不好。
    • 对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符)。(也就是让人一眼能看出这个变量或者这个函数是哪个模块(或者文件)里的)(但是一般也很少这么干,与2中违背)
    • 全局变量在命名时加上“g_”,比如 int  g_val = 0; 
    • 因为C语言区分大小写,所以命名的不允许出现仅仅靠大小写区分的变量名或函数名(如,int x ,X;)
    • 存在相同名字的变量和函数,编译是可以通过的,但是强烈建议不要这么干
    • 所有的宏定义,枚举常量,只读变量全用大写字母命名。用下划线分割单词
    • 作为循环变量直接使用i,j,k即可。
    • 局部变量定义时一定要进行初始化。(如果不初始化,是随机值)。(在vs之中不初始化,进行打印,直接报错,在Linux中会有随机值(或者说默认值))在Clion中是随机值。
    • 不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展(命名时应当确保左右两边数据类型一致)

        以上就是对变量的初步详解,如果对你有用,就留个小红星吧,这对我帮助很大。谢谢🙏

                                                                            

     

  • 相关阅读:
    计算机Java项目|基于SpringBoot的网上摄影工作室
    学会编程,能拿高薪?别再被洗脑了
    QT+OSG/osgEarth编译之二十三:Shapelib+Qt编译(一套代码、一套框架,跨平台编译,版本:Shapelib-1.5.0)
    vSphere6.7创建Windows Server 2016虚拟机及磁盘扩容
    makefile之链接静态库
    Quartz任务调度
    力扣第321场周赛+acwing第79场周赛补题
    服务拓扑串联难?eBPF为滴滴可观测带来解题新思路
    redux connect组件在手工传入参数时报错
    易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)
  • 原文地址:https://blog.csdn.net/m0_63125842/article/details/127554072