作用域,链接,储存区,

1.作用域描述程序中可访问标识符的区域。一个c变量的作用域可以是块作用域(是用一对花括号括起来的代码区域),函数作用域(仅用于goto语句的标签),函数原型作用域(用于函数原型中的形参名)或文件作用域(该文件作用域变量也叫全局变量)

2.c变量有3种链接属性:外部链接,内部链接或无连接。具有块作用域,函数作用域或函数原型作用域的变量都是无链接变量。具有文件作用域的变量都是外部或内部链接。(通常把内部链接的文件作用域简称为“文件作用域”,把外部链接的文件作用域简称为“全局作用域”,或“程序作用域”。

int ret=5;//文件作用域,外部链接
static reu=8;//文件作用域,内部链接
该文件和同一程序的其它文件都可使用变量ret。但变量reu属于文件私有,(其它文件只能间接使用)在该文件中任意函数可以使用reu。

3.作用域和链接描述了标识符的可见性,储存期描述了通过这些标识符访问的对象的生存期。c语言有4种储存期:静态储存期,线程储存期,自动储存期,动态分配存储期。

静态储存期:若对象具有静态储存期,它在程序执行时一直存在。(static表明了链接属性,不是储存期)列如static修饰的文件作用域变量具有内部链接,但无论内部链接和外部链接,文件作用域变量都具有静态存储期。也可以说改变了其生命周期,但未改变其作用域

线程存储期:用于并发程序设计,程序执行可被分为多个线程。具有线程存储期的对象,从被声明到线程结束一直存在。

自动存储期:属于自动存储的类别的变量具有自动存储期,且具有块作用域,无链接。

#include<stdio.h>
int main()
{
   int x=10;//原始的x
   int j=0;
   for(i=0;i<4:i++)
      {
      int x=8;//新的x,隐藏了原来的x
      printf("%d\n",x+i);
      }
   while(x>5)//原始的x
      { 
        x--;

      }
printf("%d",x);

return 0
}

块作用域的静态变量

#include<stdio.h>
void list();
int main()
{
  int count 0;
  for(count=0;count<=4;count++)
     {
       printf("%d",count);
     }
  list();
  return 0;
}
void list()
{
  int j=0;
  static int k=1;
  j++;
  k++;
  printf("%d %d",j,k); //j每次都为1,static保存了k的值,会增加
}

extern:不能创建外部的定义,只能引用现有的外部定义

extern int w;//引用式声明,外部链接
static int h=0;//静态定义,内部链接
int count=0;//文件作用域,外部链接
int main()
{   int i=0;//自动变量(局部变量)
    register int k;//寄存器变量
    static int u=0;//静态,无链接
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值