[C][变量作用域]语句块

概述

     C语言作用域有点类似于链式结构,就是下层能访问上层声明的变量,但是上层则不能访问下层声明的变量

#include <stdio.h>
#define TRUE 1

int main(void)
{
    if (TRUE)
    {
        int x = 2;
        if (TRUE)
        {
            printf("%d\n", x);\\output: 2
        }
    }
}

     就像上述例子,第二个if语句块是可以访问到第一个if语句块中声明的变量x的;

     C语言一般把变量作用域归结为4个:

      1.文件作用域;

      2.语句块作用域;

      3.函数原型作用域;

      4.函数作用域;

     当当前层声明了一个跟上层标识符和命名空间一模一样的变量时,当前层的行为是隐藏上层的声明,启用当前层的声明,而当代码返回上层,则继续沿用上层生效的声明

#include <stdio.h>
#define TRUE 1

int main(void)
{
    if (TRUE)
    {
        int x = 2;
        if (TRUE)
        {
            int x = 3;
            printf("%d\n", x);\\output: 3
        }
        printf("%d\n", x);\\output: 2
    }
}

     当不带类型声明符时,当前层可以访问包括改变上层的变量:

#include <stdio.h>
#define TRUE 1

int x = 1;
void chx(void);

int main()
{

    chx();
    if (TRUE) {
        printf("%d\n", x);//output: 3
    }
}

void chx(void)
{
    x = 3;
}

     对于extern外部变量,规则也是适用的:

/*file a.c*/
int x = 2;
/*file b.c*/
#include <stdio.h>
#define TRUE 1

extern x;
void chx(void);

int main()
{
    printf("%d\n", x);\\output: 2
    chx();
    if (TRUE) {
        printf("%d\n", x);\\output: 3
    }
}

void chx(void)
{
    x = 3;
}

 

     以上两个规则对于4个变量作用域都有效,整个结构类似于这样:

     

 

转载于:https://www.cnblogs.com/yiyide266/p/10295285.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值