软件发布| 专题库| 优优资讯| 苹果专区| 安卓专区| 软件下载| 首页
优优资讯 电脑教程 安卓教程 安卓攻略 苹果教程 苹果攻略 新闻资讯

C语言入门教程之变量的详细解析

时间:2015-05-21 来源:本站整理 我要评论

  Turbo C2.0规定所有变量在使用前都必须中以说明。一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量说明的形式如下:

  类型 <变量表>;

  这里类型是指Turbo C2.0的有效数据类型。变量表是一个或多个标识符名, 每个标识符之间用","分隔。

  例如:

  int i, j, k; unsigned char c, str[5], *p;

  变量种类

  变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。

  一、局部变量

  局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进行说明,当auto省略时,所有的非全程变量都被认为是局部变量,所以auto实际上从来不用。

  局部变量在函数调用时自动产生, 但不会自动初始化,随函数调用的结束,这个变量也就自动消失了, 下次调用此函数时再自动产生,还要再赋值,退出时又自动消失。

  二、形式参数

  形式参数是指在函数名后面的小括号里定义的变量,用于接受来自调用函数的参数。形式参数在函数内部可以象其它局部变量那样来作用。

  例如:

  puthz(int x, int y, int color, char *p)

  {

  int i, j, k; /*定义局部变量*/

  <程序体>

  }

  其中x, y, color, *p为函数的形式参数, 不需要再进行说明就可在该函数内直使用。

  三、全程变量

  全程变量是指在所有函数之外说明的变量, 它在整个程序内部者是"可见的",可以被任何一个函数使用, 并且在整个程序的运行中都保留其值。全程变量只要满足在使用它以前和函数以外这两个条件, 可在程序的任何位置进行说明,习惯上通常在程序的主函数前说明。

  例如:

  #include<stdio.h>

  int test; /*定义全程变量*/

  void f1(int x, float y); /*子函数说明*/

  void f2(void); /*子函数说明*/

  main()

  {

  test=5; /*给全程变量赋值*/

  f1(20, 5.5); /*调用有形式参数的子函数f1()*/

  /*test的值变成115*/

  f2(); /*调用f2(), test的值变为1150*/

  }

  void f1(int x, float y)

  {

  float z; /*z定义为局部变量*/

  z=x*y; /*计算*/

  test=test+z;

  }

  void f2(void)

  {

  int count=10; /*定义局部变量并初始化*/

  test=test*count;

  }

  由于全程变量可被整个程序内的任何一个函数使用,所以可作为函数之间传递参数的手段,但全程变量太多时,内存开销变大。

  变量存储类型

  Turbo C2.0支持四种变量存储类型。说明符如下:

  auto static extern register

  下面分别来介绍。

  一、auto

  auto称为自动变量, 已在前面作了介绍, 这里不再重复。

  二、static

  static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。

  1. 静态局部变量

  它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。

  2. 静态全程变量

  Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。

  三、extern

  extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外,还要被其它文件使用。因此,必须将全程变量通知每一个程序模块文件,此时可用extern来说明。

  例如:

  文件1为file1.c 文件2为file2.c

  int i, j;/*定义全程变量*/ extern int i, j;/*说明将i, j从

  文件1中复制过来*/

  char c; extern char c; /*将c复制过来*/

  void func1(int k); func2() /*用户定义函数*/

  {

  main() static float k;/*定义静态变量*/

  { i=j*5/100;

  func1(20);/*调用函数*/ k=i/1.5;

  func2(); .

  . .

  . .

  . }

  }

  func1(int k) /*用户定义函数*/

  {

  j=k*100;

  }

  对于以上两个文件file1.c和file2.c, 用Turbo C2.0的集成开发环境进行编译连接时,首先应建立一个.prj的文件。例如file.prj, 该文件内容如下:

  file1.c

  file2.c

  然后将file.prj的文件名写入主菜单Project中的Project Name项中。再用F9编译连接,就可产生一个文件名为fioe.exe的可执行文件。

  外部变量和FORTRAN语言中的COMMOM定义的公共变量一样。

  四、register

  register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量, 一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。

  另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量,因此,不能用作全程变量。定义一个整型寄存器变量可写成:

  register int a;

  对于以上所介绍的变量类型和变量存储类型将会在以后的学习中,通过例行程序中的定义、使用来逐渐加深理解。
 

用户评论

(已有0条评论)
表情
注:您的评论需要经过审核才能显示哦,请文明发言!
还没有评论,快来抢沙发吧!
快速检索
0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z