7.1.6 本地变量

1.本地变量

函数的每次运行,都会产生独立的变量空间,在这个空间里的变量,是函数的这次运行独有的,我们称为本地变量,即定义在函数内部的所有变量都是本地(local)变量,或者局部变量(因为local也有局部的意思)及自动变量(因为它的生存期是自动的).参数也是本地变量.1.

2.变量的生存期和作用域

  • 生存期:什么时候这个变量出现了,到什么时候它消失了.
  • 作用域:在(代码的)什么范围可以访问这个变量(这个变量可以起作用).

对于这两个问题,有一个相同的答案:大括号内:块.

我们继续看之前的swap函数:#include<stdio.h>
void swap(int a,int b);
int main(){
    int a=5;
    int b=6;
    swap(a,b);
    printf("a=%d,b=%d",a,b);
    return 0; 
}
void swap(int x,int y){
    int t=x;
    x=y;
    y=t;
}

如果变量不存在,它会说明不存在,如果存在的话,它会给出相应的值.我们进行调试:

在还没有进入swap函数的时候,a和b都是存在的,也会有对应的值.而x,y,t则是不存在的.而当我们进入swap的时候:

我们会发现,a和b不存在了,而x,y,t存在了,因为我们现在在swap里面.作为生存来说,a,b还在,但作为作用来说,它们不在它们的作用域里面了.而在我们离开了swap之后,a,b存在,而t,x,y又不存在了.

3.本地变量的规则

本地变量是定义在块内的.

  • 它可以是定义在函数的块内
  • 也可以定义在语句的块内.如在一个if语句定义了一个int变量a,判断条件为a>b,它在if里面是存在的,但是如果你在if以外使用这个a,编译器就会报错,说这个a没有被声明.而且如果a不大于b,if不执行,i也是不存在的.他的生存期和作用域都是受限于if的这个大括号.
  • 我们甚至可以随便拿一对大括号来定义变量.

程序运行进入这个块之前,里面的本地变量是不存在的,而离开了这个块,那它们也会消失.但是,在块外面定义的变量,在块里面仍然有效.而里面的变量出来到外面就不存在了.如果在块里面定义了一个和块外面同名的变量,那么在块里面的变量会把块外面的变量给掩盖掉,但仅限与在块内,如果离开了块,那这个变量也会消失,块外面同名的变量仍是原来的那个变量.不是所有的编程语言都是这么干的,比如java.虽然可以在块内外定义同名的变量,但是不能在一个块内定义同名的变量.还有:

  • 本地变量不会被默认初始化
  • 参数在进入函数的时候就已经被初始化了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值