C语言变量详解_第1页
C语言变量详解_第2页
C语言变量详解_第3页
C语言变量详解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言中的变量解析1、声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储。2、定义一个变量意味着在声明变量的同时还要为变量分配存储空间。在定义一个变量的同时还可以对变量进行初始化。3、作用域和生存期 。作用域:局部、全局和文件三种。标识符的作用域决定了程序中的哪些语句 能够使用它。(即标识符在程序其他文件中的可见性)通常标识符的作用域都是 由它在文件中的位置隐式说明的。3.1、局部变量。(局部作用域) 他们通常声明在函数的内部或者语句块的 内部。所谓局部变量就是他们不能被其他函数或者语句块的代码所访问。 函 数的形式参数也是局部的, 它的作用范围仅限于函数的内部所使用的语句块。

2、代 码如下:void add(int);void main()int num=5;add(num);printf( “%dn”,num);void add(int num)num+;printf(“%dn”,num);解说:上述例子 num 变量都是局部变量,在两个函数出现同名的变量的时候 并不会互相干扰。所以上面的两个输出,在主函数中是5,在add ()函数中是 6 。3.2、全局变量。(全局的作用域)全局变量我们可以在程序的任何位置访问 它们,当一个变量在所有函数的外部声明,并且是在程序的开头说,那么这 个变量就是全局变量。void add(int); int num;void main(

3、)int n=5;add(n);printf( “%dn”,num);void add()num+;printf(“%dn”,num);解析:上面的main和add ()里面并没有声明num,在最后输出的时候却输 出了 num,这是由于在程序的开始声明了 num是全局变量,在所有函数里都 可以使用这种变量。这时候一个函数里改变了变量的值,其他函数里的值也 会出现影响。上面的例子输出的都是 6.由于num是全局变量,就好像他们两 个函数共用了一个变量,所以在 ma in ()函数里的num也随之改变。3.3、文件的作用域。 文件的作用域在较大的程序中很有作用。 文件的作用域 是指外部的标识符仅在

4、声明它的同一转换单元内的函数中可见。所谓的转换 单元是指定义这些变量和函数的源代码。 Static 存储类型修饰符制定了变量具 有文件的作用域。源代码如下:static int num; static void add(int);main() Scanf(“%d”&num);add(num);void add()num+;上面的程序中变量num和函数add()在声明中采用了 static存储类型和 修饰符,这使得他们有文件的作用域。4、变量的存储类型。前面我们说了,声明变量时用了如下格式:Int,num;float;total; 他们只是声明了数据的类型,并没有声明数据的存储类型修饰符。我们在

5、声 明的时候通过存储类型修饰符来告诉编译器将要处理什么类型变量。 存储器的类 型有一下四种:自动存储类型(auto)、静态(static)、外部(extern)、寄存器(register). 4.1、自动存储类型( auto)自动存储类型修饰符指定了一个局部变量为自动的,这意味着,每次执行到 定义该变量的语句块时, 都将会为该变量在内存中产生一个新的拷贝, 并对其进 行初始化,实际上,如果不特别指明,局部变量的存储类型就默认为自动的。main()auto int num=5;pintf(“%dn”,num);在例子中,不论变量num的声明是否包含关键字auto,代码的执行效果都是 一样的,函数

6、的形式参数的存储类型默认也是自动的。4. 2静态存储变量。前面已经使用了 static关键字,但是对于局部变量,静 态存储类型的意义是不一样的, 这时候, 它和自动存储类型相对而言的, 静态局 部的变量作用域仍然是局限于声明它的语句块, 但是在语句块执行期间, 变量将 始终保持它的值。 而且初始化只是在语句块上执行一次, 在随后的运行中, 变量 将保持语句块上一次执行的值,源代码如下:1.cint add();main()int result; result=add(); printf(“%d”,result);result=add();printf(“%d”,result); result=

7、add();printf(“%d”,result);int add()int num=50; num+; return result;2.cint add();main()int result; result=add(); printf(“%d”,result); result=add();printf(“%d”,result); result=add();printf(“%d”,result);int add()static int num=50;num+;return num; 上面两个文件 :1.c 输出 51、 51、 51.每次初始化num的值为50,加上1为512.C输出 51、5

8、2、53Static 修饰的变量第一次调用时初始化 num 值为 50,加 1 为 51 第二次调用就不进行初始化了这是值是上次的结果 51,加上 1 的话,就变成 52,以此类推为 53.4.3、外部的存储类型。 外部的存储类型声明了程序中将要用到的,但是尚未定义的外部变量。 通常外部的存储类型都是用于声明在另外一个转换单元中定义的变量。 下面 举一个例子,这个例子包括两个文件。a. C:void a();main()Extern int num;a();printf( “%”d”,num);b. Cint num; void a() num=5;这两个程序是分别编译的, 然后连接成一个执行

9、文件。 把上面两个文件都编译好 后,再制作一个.prj文件,里面的内容:第一行为1.C第二行为2.C 在可编辑状态下写成,存盘,取名为l.prj。然后选择project选项,选择project name 填入l.prj文件名,按F9后,即可以生成1.exe文件Main函数中的变量num是在另外一个文件中定义的,因此当编译器编译1.C时候无法确定变量的地址, 这时,外部的存储变量类型声明告诉编译器, 把所有对 num 的引用单做暂且无法确定的引用, 等所有编译好的目标代码进行连接成一个 可以执行的程序模块的时候,再来处理对 num 的引用。 外部变量的声明既可以在引用它的函数内部, 也可以在外部, 如果变量的声明在 函数的外部, 那么同一转换单元都可以使用这个外部变量, 反之如果在函数的内 部,那么只有这个函数可以使用这个变量,反之,如果在函数内部,那么只有这 个函数可以使用这个变量。前面说了文件作用域问题,如果在声明全局变量时, 加上static修饰符,那么该变量只是在该文件内可见,而extern又可以引用其他

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论