Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68154
  • 博文数量: 24
  • 博客积分: 410
  • 博客等级: 一等列兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-16 19:10
文章分类
文章存档

2011年(24)

分类: C/C++

2011-04-10 13:10:23

具有代码块作用域被现正在内部代码块中,具有代码块作用域的变量必须在代码块的开始处进行申明。而C99放宽了这一限制,它允许一个代码块中任何位置申明变量。

文件作用域也被称为全局变量。

链接:C语言有三种链接,外部链接,内部链接,还有空链接。例如:

int gaiant = 5  ;//文件作用域,外部链接

static int dogs = 5;//文件作用域,内部链接

int main()......

存储时期:  C语言有两种存储期  ,静态存储器,动态存储期

如果一个变量具有静态存储期,那么它在程序执行期间将一直存在 一个使用static声明的文件作用域变量具有内部链接,而所有的问价作用域变量,无论是具有内部链接还有具有外部链接,都具有静态存储期。

寄存器变量多是存放在寄存器而非内存中。所有无法获得寄存器的地址,在其他方面,寄存器变量和自动变量是一样的拥有代码块作用域,空链接,以及自动存储时期。

外部变量具有静态存储时期。   对于外部变量,如果不对他初始化,则系统会自动给初值0.

变量定义和变量声明:  例如

int tern = 1;

min()

{

        extern int tern ;

}

在这里tern声明了两次,第一次声明为变量留出了存储空间,它构成了变量的定义,第二次声明只是告诉编译器要使用先前定义的变量,因此不是一个定义。第一次的声明称为定义声明,第二次的声明称为引用声明。

注意:不要用extern来进行外部声明,只用它来引用一个已经存在的外部定义。

关键字extern的存在标志着这是一个引用声明,而非定义声明。

存储类说明符:特别的,不可以在一个声明中使用一个以上的存储类说明符,这意味着不能见将其他地方任意存储类说明符作为typedef的一部分。typedef与内存存储无关。

动态内存分配和变长数组:对于顶一个二维数组,用变长数组很方便

int (*p2)[6]; 表明 p2指向ige包含6个int值的数组。

一个变量有类型和存储类,C90增加了新的两个属性:不变形和易变性。这些属性是通过const和volatile 来声明的。而C99添加了第三个限定词restrict

限定词volatile告诉编译器该变量出了可被程序改变之外还可以比其他代理改变。

restrict通过编译器优化某种代码,它只用于指针,并表明指针是访问一个数据对象的唯一且初始的方式。

静态外部链接 在所有函数外部定义,未使用存储类修饰符static

静态内部链接 在所有函数外部定义,使用存储类说明符static

静态空连接 在代码块内使用,有修饰符static申明的变量。

 

阅读(1304) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~