存储期是变量在内存中的存储期限,存储器分为动态存储期和静态存储期。

    局部变量定义时不赋初值,那么其初值是不确定的:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /***
    4. * 局部变量定义时不赋初值,那么其初值是不确定的
    5. *
    6. * */
    7. int main() {
    8. int a[10]; // 定义时未赋初值,其初值不确定
    9. for(int i = 0; i < 10; i++) {
    10. printf("%d ", a[i]);
    11. }
    12. puts("");
    13. return 0;
    14. }
    1. 2073290835 -2 6422280 1988918685 4200912 6422356 4201003 4200912 17765480 0

    局部静态变量,初始值只赋值一次,函数调用消失后保留原值,下次函数调用时保留上次调用函数结束时的值:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * 局部静态变量,只赋值一次
    5. * */
    6. int f() {
    7. static int a = 0; // 局部静态变量
    8. a++;
    9. return a;
    10. }
    11. int main() {
    12. for(int i = 0; i < 3; i++) {
    13. printf("%d%c", f(), " \n"[i==2]);
    14. }
    15. return 0;
    16. }
    1. 1 2 3

    extern 扩展全局变量作用域:

    在单个文件中扩展

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * extern 对变量做提前引用声明,扩展在程序中的作用域
    5. * */
    6. int my_max(int x, int y) {
    7. return x > y ? x : y;
    8. }
    9. int main() {
    10. extern int a, b; // 提前声明变量
    11. cout<<my_max(a, b)<<endl;
    12. return 0;
    13. }
    14. int a = 15, b = -7;

    在多个文件中扩展:

    1. #include<bits/stdc++.h>
    2. #include "4.2.cpp"
    3. using namespace std;
    4. extern int a, b; // 需要使用 extern 扩展作用域,否则就是重定义
    5. int main() {
    6. printf("a=%d b=%d\n", a, b);
    7. return 0;
    8. }

    其中另一个文件中的内容

    1. int a = 3, b = 4;