当前位置:首页 > 全部子站 > IT > 水平考试

C语言初学者入门知识之函数04 3

来源:长理培训发布时间:2017-10-20 13:20:37

  变量的存储方式可分为"静态存储"和"动态存储"两种。

  静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。5.5.1节中介绍的全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作用域来判断,还应有明确的存储类型说明。

  在C语言中,对变量的存储类型说明有以下四种:

  auto 自动变量

  register 寄存器变量

  extern 外部变量

  static 静态变量

  自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。因此变量说明的完整形式应为:存储类型说明符 数据类型说明符 变量名,变量名…;

  例如:

  static int a,b; 说明a,b为静态类型变量

  auto char c1,c2; 说明c1,c2为自动字符变量

  static int a[5]={1,2,3,4,5}; 说明a为静整型数组

  extern int x,y; 说明x,y为外部整型变量

  下面分别介绍以上四种存储类型:

  一、自动变量的类型说明符为auto

  这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定,函数内凡未加存储类型说明的变量均视为自动变量,也就是说自动变量可省去说明符auto。 在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。例如:

  { int i,j,k;

  char c;

  ……

  }等价于: { auto int i,j,k;

  auto char c;

  ……

  }

  自动变量具有以下特点:

  1. 自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。 例如:

  int kv(int a)

  {

  auto int x,y;

  { auto char c;

  } /*c的作用域*/

  ……

  } /*a,x,y的作用域*/

  2. 自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。例如以下程序:

  main()

  { auto int a,s,p;

  printf("ninput a number:n");

  scanf("%d",&a);

  if(a>0){

  s=a+a;

  p=a*a;

  }

  printf("s=%d p=%dn",s,p);

  }

  { auto int a;

  printf("ninput a number:n");

  scanf("%d",&a);

  if(a>0){

  auto int s,p;

  s=a+a;

  p=a*a;

  }

  printf("s=%d p=%dn",s,p);

  }

  s,p是在复合语句内定义的自动变量,只能在该复合语句内有效。而程序的第9行却是退出复合语句之后用printf语句输出s,p的值,这显然会引起错误。

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部