C8节:作用域,生命周期,指针

    
变量的作用域是变量名可以被使用的所有代码范围

全局变量的作用域是所有语句,它们被声明在所有函数外边
没有初始化的全局变量自动被初始化成0

局部变量的作用域是它所属的函数内部所有语句。

块变量是声明在语句块中的变量,它们的作用域是语句块内的所有语句

/*
    作用域练习
*/
#include <stdio.h>
int num;   //全局变量
void func() {
    int num1 = 0;  //局部变量
    printf("num1是%d\n", num1);
    //printf("num2是%d\n", num2); 不在作用域
    printf("num是%d\n", num);
}
int main() {
    int num2 = 0;  //局部变量
    printf("num是%d\n", num);
    //printf("num1是%d\n", num1); 不在作用域
    printf("num2是%d\n", num2);
    {
        int num3 = 0;   //块变量
        {
            int num4 = 0;
            printf("num3是%d\n", num3);
            printf("num4是%d\n", num4);
        }
        printf("num3是%d\n", num3);
        //printf("num4是%d\n", num4);  不在作用域
    }
    //printf("num3是%d\n", num3); 不在作用域
    //printf("num4是%d\n", num4); 不在作用域
    return 0;
}


    
变量的生命周期指变量可以被使用的时间范围

全局变量在整个程序运行期间有效

局部变量只在函数运行期间有效

块变量只在语句块运行期间有效
    
普通局部变量都是auto类型的,它们的生命周期是函数运行期间
static类型的局部变量叫做静态局部变量,它们的生命周期是整个程序运行期间。
没有初始化的局部变量会自动被初始化成0
静态局部变量的初始化语句只在程序开始时执行一次

/*
    生命周期练习
*/
#include <stdio.h>
int f1() {
    static int num = 10000;
    printf("num是%d\n", num);
    num = 3;
}
int f2() {
    int num = 0;
    int num1 = 1;
    int num2 = num + num1;
    int num3 = 0 - num2;
}
int main() {
    f1();
    f2();
    f1(); 
    return 0;
}

 

思考题:
    省略所有函数的数组参数作为前提

    1.圈叉棋中的二维数组可不可以使用全局变量代替
    2.可不可以使用静态局部变量代替

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值