眼部整形

首页 » 常识 » 问答 » 快速上手系列C语言之变量的存储类别与作
TUhjnbcbe - 2024/7/9 20:29:00
北京重点白癜风医院 http://pf.39.net/bdfyy/xwdt/
在程序中,如果要表示某个人的年龄,则可以使用int型变量来表示,如:intage=0;在这个过程中,为了表示年龄我们定义了一个int型变量,可以而变量的定义是可以在函数的内部定义,也可以在块内部定义,还可以在函数的外部定义。由于变量定义的位置不同,因而具有不同的使用范围,超出这个使用范围该变量就不能被访问,即我们所说的作用域。根据作用域的不同,将变量分为局部变量和全局变量。局部变量与全局变量1、普通局部变量在一个函数内部定义,只在函数范围内有效;在复合语句中定义,只在复合语句中有效;随着函数调用的结束或复合语句的结束而消亡这里定义的变量a位置在main函数内部,因此只能在main函数中使用,在main函数外部的其他函数中无法使用。(1)这里定义了两次变量a,它们不会冲突?不会冲突,因为他们的作用域不同,不同作用域的变量名称是可以重复的。变量a的第一次定义:inta=;是在main函数内部,其在main函数未结束或者未返回之前都是有效的;变量a的第二次定义,inta=10;是在块(即大括号)中定义的,它只在大括号中有效,离开这个大括号变量a就会消亡。(2)既然定义了两个变量a,如何区分两次使用printf打印的到底是哪个变量?因为变量a=10;的作用域只在大括号内部,出了大括号它就完蛋了,所以第二次使用printf打印的当然是变量a=;很显然,变量a=和变量a=10在大括号内都是有效的,那第一次打印的是哪个呢?这里遵循“就近原则”,即打印的是变量a=10。2、普通全局变量在函数外定义,可被本文件中其它函数所共用;作用域:从定义变量的位置开始到文本结束;生存周期:在程序运行的整个周期都存在;若其它文件中的函数调用此变量,须用extern进行声明说明:g为全局变量,其作用域为当前文件,因此在main函数中我们可以去使用它。注:同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用,就是说局部变量的值会覆盖全局变量的值,也就是上面提到的“就近原则”,看个例子:静态局部变量与静态全局变量静态变量在定义的时候与普通变量不同,静态变量定义时用static来修饰,如:staticintnum=10;1、静态局部变量第一次进入函数调用变量时初始化,以后每次进入函数,此变量保持上一次的值,具有记忆特性;作用域:本函数范围内;生存周期:整个程序运行的周期。从上面例子可以看出,普通局部变量与静态局部变量不同,静态局部变量具有“记忆性”。2、静态全局变量在函数外定义,作用范围被限制在所定义的文件内,在其他文件中即便是用extern来声明也不能被使用;不同文件静态全局变量可以重名,但作用域不冲突;生存周期:整个程序运行的周期。注意事项:虽然普通全局变量和静态全局变量的生命周期相同,但还是有区别的,比如,在多个.c源文件中,全局静态变量是定义该变量的源文件所独享的,即便是加extern修饰,其他源文件也是不能访问的,但普通全局变量却可以;形参变量属于被调函数的局部变量,实参变量属于主调函数的局部变量;允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰;局部变量如不作说明,都是auto的,且auto可以省略;局部变量也可以定义为register型,告诉系统对其分配地址时尽量将其分配在寄存器中,以提高访问速度;尽量少使用全局变量,因为在程序执行整个过程中都占用资源,同时会破坏函数的封闭性;同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用;静态局部变量如不赋初值,编译时系统会自动将其赋值(整形变量为0,指针为NULL);动态局部变量如不赋值,则为随机值。接下来就该写写C中的宏定义及预编译命令了,想了解的小伙们可以
1
查看完整版本: 快速上手系列C语言之变量的存储类别与作