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申明的变量。