【嵌入式学习经验】快速了解C语言中的作用域和常量

126 阅读4分钟

前言

感谢各位大佬百忙之间过来观看,从前端到嵌入式,我的转行经历和经验分享!《C 语言小白入门篇》带大家零基础学好好 C 语言。从入门到到放弃,希望大家多多支持!

变量作用域和生命周期

作用域

作用域是指变量在程序中可被访问的范围。在 C 语言中,变量的作用域分为局部作用域和全局作用域。

  1. 局部变量的作用域:局部变量是在函数内部定义的变量,它的作用域仅限于函数内部。也就是说,只有在函数内部才能访问和修改局部变量。

    #include <stdio.h> 
    void function() { 
        int localVar = 10; // 局部变量 
        printf("Local variable: %d\n", localVar); 
    }
    int main() { 
        function(); // 尝试访问局部变量 localVar,将会导致错误 
        // printf("Local variable: %d\n", localVar); 
        return 0;
    }
    

    在上述代码中,localVar是在function函数内部定义的局部变量,它的作用域仅限于function函数内部。在main函数中尝试访问localVar将会导致错误。

  2. 全局变量的作用域:全局变量是在函数外部定义的变量,它的作用域是整个程序。也就是说,在程序的任何地方都可以访问和修改全局变量。

     #include <stdio.h>
    
        int globalVariable = 10; // 全局变量
    
        void function() {
            printf("Global variable: %d\n", globalVariable);
        }
    
        int main() {
            function();
            printf("Global variable: %d\n", globalVariable);
            return 0;
        }
    

    在上述代码中,globalVariable是在函数外部定义的全局变量,它的作用域是整个程序。在function函数和main函数中都可以访问和修改globalVariable的值。

生命周期

生命周期是指变量在程序中存在的时间。在 C 语言中,变量的生命周期分为静态生命周期和动态生命周期。

  1. 局部变量的生命周期:局部变量的生命周期是动态的,它在函数被调用时创建,在函数返回时销毁。

  2. 全局变量的生命周期:全局变量的生命周期是静态的,它在程序运行期间一直存在,直到程序结束。

常量

常量是指在程序运行过程中其值不能被改变的量。C 语言中的常量分为以下几种:

  1. 字面常量:字面常量是指直接在程序中使用的常量,例如整数常量、浮点数常量、字符常量和字符串常量。

    #include <stdio.h>
    
     int main() {
         int number = 10; // 整数常量
         float pi = 3.14; // 浮点数常量
         char letter = 'A'; // 字符常量
         printf("Number: %d\n", number);
         printf("Pi: %.2f\n", pi);
         printf("Letter: %c\n", letter);
         return 0;
     }
    

    在上述代码中,103.14'A'都是字面常量。

  2. const 修饰的常变量:const 修饰的常变量是指使用 const 关键字修饰的变量,它的值在程序运行期间不能被改变。

     #include <stdio.h>
    
        int main() {
            const int number = 10; // 常变量
            printf("Number: %d\n", number);
            // 尝试修改常变量,将会导致错误
            // number = 20;
            return 0;
        }
    

    在上述代码中,number是使用const关键字修饰的常变量,它的值在程序运行期间不能被改变。

  3. #define 定义的标识符常量:#define 定义的标识符常量是指使用 #define 预处理指令定义的常量,它的值在程序编译期间就已经确定,并且在程序运行期间不能被改变。

      #include <stdio.h>
    
        // 定义标识符常量
        #define PI 3.14
    
        int main() {
            float radius = 5.0;
            float area = PI * radius * radius;
            printf("Area: %.2f\n", area);
            return 0;
    
    

    在上述代码中,使用#define预处理指令定义了标识符常量PI,它的值在程序编译期间就已经确定,并且在程序运行期间不能被改变。

  4. 枚举常量:枚举常量是指使用 enum 关键字定义的常量,它的值是枚举类型中的一个枚举值。

    #include <stdio.h>
    
    // 定义枚举类型
    enum Day {
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
        SATURDAY,
        SUNDAY
    };
    
    int main() {
        enum Day today = WEDNESDAY; // 枚举常量
        printf("Today is %d\n", today);
        return 0;
    }
    

    在上述代码中,使用enum关键字定义了枚举类型Day,其中MONDAYTUESDAY等都是枚举常量。在main函数中,使用WEDNESDAY枚举常量来表示星期三。

枚举常量

  1. 枚举类型的值是多少呢? :枚举类型的值是枚举类型中的一个枚举值,它可以是整数类型或字符类型。

  2. 枚举类型的值怎么修改? :枚举类型的值在定义后不能被修改,但是可以通过强制类型转换将枚举值转换为其他类型的值。

总结

以上就是关于 C 语言中作用域和常量的简单介绍。希望这篇文章能够帮助你快速了解这些概念。如果你有任何其他问题,请随时提问。