变量的了解

1、普通局部变量

-------------定义形式:在{}里面定义的 普通变量 叫做 普通局部变量

-------------作用范围:所在的 {} 复合语句之间有效

变量的了解_第1张图片

-------------生命周期:所在的 {} 复合语句之间有效

-------------存储区域:栈区

-------------注意事项

(1)、普通局部变量 不初始化  内容  不确定
(2)、普通局部变量 重名 就近原则(尽量别重名)
void test02()
{                 // 复合语句
    int num = 10; // 局部变量
    {
        int num = 20;              // 局部变量
        printf("num = %d\n", num); // 就近原则
    }
    printf("num = %d\n", num);
}
int main(int argc, char const *argv[])
{
    test02();
    return 0;
}

变量的了解_第2张图片

2、普通全局变量

-------------定义形式:在函数外定义的普通变量

在这里插入图片描述

-------------作用范围:当前源文件以及其他源文件有效

-------------生命周期:整个进程

-------------存储区域:全局区

-------------注意事项

(1)、全局变量不初始化,内容为 0
(2)、全局变量 和 局部变量 重名,优先使用 局部变量(就近原则,最好不要这么干)

int data = 10; // 普通全局变量不初始化,内容为 0
void test03()
{
    int data = 20;          //普通局部变量
    printf("data = %d\n", data);
}
int main(int argc, char const *argv[])
{
    test03();
    return 0;
}

(3)、其他文件使用全局变量必须对全局变量使用extern声明,extern声明外部可用,该变量或者函数来自于其他源文件(变量的使用所在的源文件)
在这里插入图片描述

extern void add(); // 来自于其他源文件的函数
int data = 10;     // 普通全局变量不初始化,内容为 0
void test03()
{
    printf("本文件中的data = %d\n", data);
    add();
}
int main(int argc, char const *argv[])
{
    test03();
    return 0;
}

// extern声明int类型的data数据,该数据来自于其他源文件
#include 
extern int data;
void add()
{
    data = data + 1;
    printf("来自于其他文件的 data = %d\n", data);
}

在这里插入图片描述

多文件编译是为了让编译器知道本文件引用了哪些外部文件的变量!!!!!!!

3、静态普通局部变量

-------------定义形式:在{}里面使用static定义的局部变量,叫做静态局部变量

变量的了解_第3张图片

-------------作用范围:所在的{}复合语句之间有效

-------------生命周期:整个进程有效(静态特性)

-------------存储区域:全局区

-------------注意事项

(1)、静态局部变量不初始化,内容为 0(因为它在全局区)
(2)、静态局部变量整个进程都存在

#include 
void test05()
{ // 测试static定义的变量在进程有效
    int num = 10;
    num++;
    printf("num = %d\n", num);
}
int main(int argc, char const *argv[])
{
    test05();
    test05();
    test05();
    test05();
    return 0;
}

变量的了解_第4张图片

#include 
void test05()
{ // 测试static定义的变量在进程有效
    static int num = 10;     //第一次定义有效
    num++;
    printf("num = %d\n", num);
}
int main(int argc, char const *argv[])
{
    test05();
    test05();
    test05();
    test05();
    return 0;
}

变量的了解_第5张图片

4、静态全局变量

-------------定义形式:在函数外使用 static 修饰的变量 就是静态全局变量

变量的了解_第6张图片

-------------作用范围:只能在当前文件使用,而不能在其他文件使用

-------------生命周期:整个进程(静态特性)

-------------存储区域:全局区

-------------注意事项

(1)、静态全局变量不初始化 内容为 0(因为它在全局区)
(2)、只能在当前文件使用,而不能在其他源文件使用

你可能感兴趣的:(嵌入式开发学习,c++)