c fuxi

一、作用域
 
局部变量:
   自动变量:即动态局部变量,离开函数,值就消失,内存单元释放。
   静态局部变量:离开函数,值仍保留,但只能为本函数使用,分配固定的内存单元。static
   寄存器变量,离开函数,值就消失,寄存器释放。register
   形式参数可以定温文尔雅为自动变量或寄存器变量
 全局变量: 
   静态外部变量,只限本文件引用,分配固定的内存单元
   外部变量,没有用static关键字声明,允许其他文件引用,在其他文件引用时,每次都加上extern声明
 说明:
  1.主函数main中定义的变量也只能在主函数中有效,不因为在主函数中定义而在整个文件或程序中有效,主函数中不能使用其他函数中定义的变量。
  2.不同函数中可以使用相同的变量名,它们代表不同的对象,内存中占不同单元,互不干扰。
  3.形式参数也是局部变量,只有调用函数时才分配内存,函数结束,内存单元释放。
  4.一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,离开该复合语句该变量就无效。
  5.全局变量增加了函数间的通信,但在函数中改变了全局变量的值,就影响了其他函数。不建议使用全局变量,原因如下:
   全局变量在程序的全部执行过程中占用存储单元
   它使函数的通用性降低。一般要求把c程序的函数做成一个封闭体,只可以通过“实参->形参”的方式与外界发生联 
   系。这样程序的可移植性好。
   使用全局变量过多,降低程序的清晰性,难以判断出每个瞬间外部变量的值。
  若在同一文件中外部变量与局部变量同名,则在局部变量作用范围内,外部变量不起作用。
  习惯上将全局变量第一个字母用大写表示。
  6.静态存储变量在整个运行期间都不释放,占静态存储空间;动态存储占动态存储空间,函数调用结束后释放。
  7.静态局部变量是在编译时赋初值的,只在编译时赋初值一次,以后每次调用函数都引用上次调用结束时的值而不再重新赋
初值。而自动变量不是在编译时赋初值的,而是调用时重新给一次初值。
  8。程序的编译单位是源程序的一个文件。

二、时间
 动态存储:
   自动变量,auto(默认,可省略),自动局部变量在本函数内有效,(自动全局变量在本文件有效,其他文件可引 
   用,引用时加extern声明。为静态存储,有固定内存单元)
   寄存器变量,本函数内有效。
   形式参数,本函数内有效。
 静态存储:
   静态局部变量,函数内有效,值保留,其他函数不可使用,分配固定内存单元。
   静态外部变量,本文件有效,其他文件内不可引用。
   外部变量,同自动外部变量,其他文件可引用,加extern

三、变量存放的位置
 内存中静态存储区:
   静态局部变量
   静态外部变量,其他文件不可引用
   外部变量,其他文件可引用
 内存中动态存储区:
   自动变量和形式参数,函数外消失
 cpu寄存器中:
   函数外消失

声明和定义
对函数,声明是函数的原型,放在主调函数中的声明部分的。而定义是函数的本身,包括函数首部和  函数体,是一个独立模块。
对变量,声明包括定义。如:int a;建立了存储空间,称为定义性声明。
                                        extern a;不再建立存储空间,称为引用性声明。
 一般为了叙述方便,把建立存储空间的声明称定义,把不需要建立存储空间的声明称声明。


 对外部变量的定义只能有一次,它的位置在所有函数之外,而同一文件中的外部变量的声明可以有多次,它的位置可以在函数之内,
哪个函数要用就在哪个函数中声明,也可以在函数体外。系统根据定义分配内存单元,而不是根据声明分配。extern只用作声明而不用作定义

局部变量用static声明,则使该变量在整个程序执行期间不释放,分配的内存单元始终存在。
外部变量用static声明,则该变量只能在本文件中使用,而不能在其他文件中使用。
 

内部函数和外部函数
函数本质上是全局的,因为一个函数要被另外的函数调用,但是也可以指定函数不能被其他文件调用。根据函数能否被其他函数调用,将函数区分为内部函数和外部函数。
内部函数:一个函数只能被本文件中其他函数所调用,称为内部函数。定义时,函数和函数类型的前面加上static.
即:static int fun(int a,int b);
内部函数又称为静态函数。作用域只限于所在文件,在不同的文件中有同名的内部函数,互不干扰。
外部函数:定义时加上extern,可供其他函数调用。
extern int fun(int a,int b);
若省略,则隐含为外部函数,默认值。
在需要调用此函数的文件中,用extern作声明。表示该函数是其他文件中定义的外部函数。为方便,c语言允许在声明函数时省写extern.
用#include命令扩展函数的作用域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值