C语言笔记(十三)——作用域

一、作用域

    就是一个变量或者函数起作用的地方。

    一个c语言变量的作用域可以是代码块作用域、函数作用域或者文件作用域。

    (1)代码块作用域:代码块是{}之间的一段代码。

int main(void)
{
    int a = 0;
    a = 10;
    {
        int a = 100;//此处a的作用域是在这个{}范围内
    }
    printf("a = %d\n", a);//这个a表示的是a=10的值。
    return 0;
}

eg2:
int main(void)
{
    int a = 0;
    a = 10;
    {
        int a = 100;
        printf("a = %d\n", a);
    }
    return 0;
}

注:出现在{}之外的变量是全局变量

二、变量的存储类型

2.1 变量存储类型的声明:

存储类型  数据类型  变量名;

2.2 C存储类型关键字

1.auto(自动变量):动态局部变量,即一般常用的变量。生存周期:进入语句块时自动申请内存,退出时自动释放。所谓释放即内存中不放那个值,而是随机值

2.static(静态变量)生存周期静态全局变量:从程序运行起占据内存,程序结束时释放;静态局部变量:进入该函数时占据内存,退出函数时释放内存,但值保留。

3.extern(外部变量):编译器并不对其分配内存,只是表明“我知道了”

4.register(寄存器变量):保存在CPU中,具有运算速度快,容量小的特点。存在时间:程序开始到程序结束

注意

静态全局变量只能在定义该变量的文件内使用,在别的文件中不能访问

2.2.1 auto关键字

    auto 自动变量,c语言的默认变量都是auto,可写可不写。

auto int a = 0;等同于
int a = 0;

2.2.2 静态变量

a.静态局部变量:静态局部变量在函数范围内有效,函数外无效。

int mystatic()
{
    int a = 0;
    printf("a =%d\n", a);
    a++; //a++只能在这个{}内访问
}
int main()
{
    int i;
    for(i = 0; i < 10; i++)
    {
        mystatic();
    }
    return 0;
}

  静态变量是指内存位置在程序执行期间一直不改变的变量,一个代码块内部的静态变量只能被这个代码块内部访问。

int mystatic()
{
    static int a = 0; //静态变量,只初始化一次(即只在开始时运行了一次,后面不管运行几次都跟它无关),且程序运行期间,静态变量一直存在
    printf("a = %d\n", a);
    a++;
}
int main()
{
    int i;
    for(i = 0; i < 10; i++)
    {
        mystatic();
    }
    return 0;
}

    注:函数通常是全局的,而一旦用static进行限制,即:

 static void test()

{

}

那该函数就只能在当前这个文件中使用,不能被别的文件调用。

b. 静态全局变量(即全局变量)

    代码块之外的静态变量在程序执行期间一直存在,但只能被定义这个变量文件访问

2.2.3 extern 跨文件作用域

    当想调用另一个文件中的某个变量时,需要用extern在本文件中声明。

    比如:想在本文件中调用a.c文件中的mymax变量,在程序的开头加下面这一句

extern int mymax;

不加extern,则表示全局变量。

2.2.4 register寄存器变量

    一般的变量大都保存在内存中,如果能把变量放到CPU的寄存器里面,代码执行效率会更高

register int i = 0;//建议,若有寄存器空闲,那么这个变量就放到寄存器里面使用

注:对一个register变量是不能进行取地址操作的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值