C语言基础(五) 作用域 生命周期

本文详细介绍了C语言中的变量作用域,包括文件域、函数域和语句块域,并探讨了变量的生命周期。同时,讲解了全局变量、局部变量、静态变量的区别,以及如何通过extern关键字在不同目标文件间共享变量。此外,还讨论了函数参数传递(值传递、传指针、传引用)和函数返回值的方式。
摘要由CSDN通过智能技术生成

2016.7.26

 变量的作用域:

文件域:在整个源文件声明的标识符,整个文件中都可以被访问。(如全局变量)

函数域:在函数原型中声明的标识符,整个函数能访问。(如形参)

语句块域:在一个程序结构块中声明的标识符,在该程序结构块中可以被访问。(如局部变量)

int num=10;//  文件域

void func(){

    int num =20;//   函数域

    {

        int num=30;//   语句块区域

        printf("语句块区域num=%d \n",num);

    }

    printf("函数域num=%d \n",num);

    

//    printf("文件域num=%d \n",::num);  //        C++特性

}//   一个程序可以出现相同名称的变量   使用::来获取全局变量


链接:多个目标文件合并成一个可执行文件(extern

一个目标文件使用另外一个文件中的标识符,使用关键字extern


(局部变量和函数形参)自动变量定义时,系统位置开辟空间,自动变量离开作用域时,系统自动回收所占空间。(生命周期:声明变量开始到函数调用结束)

多次调用同一函数,函数内的局部变量与函数形参,将会在每次调用的时候,都自动创建与回收


全局变量:编译时开辟空间,程序结束的时候回收空间。(生命周期:整个程序运行期间)

  

static:静态局部变量,静态全局变量

静态局部变量:生命周期(创建开始程序结束),函数返回后,静态局部变量的内存不会被回收;

当下一次调用该函数时,静态局部变量依然保持上一次调用退出的值

作用域不变,依旧在函数内部

保存在静态存储区

与普通局部变量比较:作用域不变,生命周期延长


普通全局变量:生命周期(创建开始程序结束),当前目标文件有效、其他目标文件也有效(extern

静态全局变量:生命周期(创建开始程序结束),也存储在静态存储区,作用域缩小:仅限于当前目标文件                        


函数的参数与返回值

//传值

void func1(int y){

    y+=3;

}

//传指针(指针的值改变)

void func2(int *x,int *y){

    int *temp=x;

    x=y;

    y=*temp;


}

//传指针(指针指向地址内的值改变)

void func3(int *x,int *y){

    int temp=*x;

    *x=*y;

    *y=temp;

}

/*

 void func4(int &x,int &y){

    int temp=x;

    x=y;

    y=temp;

}

 */   //  因为x y num1num2的引用,所以修改xy的本质就是修改num1num2

int main(int argc, const char * argv[]) {

    /* 函数传参的三种传递方式

    // 1.值传递:单向传递,把实参的值做一份拷贝赋值个形参,形参实参互不影响

       2.传指针:特殊的传值方式,两个指针指向同一块空间(指针的值改变、指针指向地址内的值改变)

       3.传引用:形参是实参的一个别名(形参就是实参),操作形参就是操作实参


函数返回值3种方式(值返回、指针返回、引用返回)

值返回:int ,float … func(){}  与定义的函数类型保持一致 

 ***************** 当函数以值返回形式,编译器会创建一个临时的变量来接收返回值**************

指针返回:int * func6(){

return p;

}//

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值