变量声明的标准格式
存储类型 数据类型 变量名。例如:static int I =5;(每个变量至少包括存储类型和数据类型。)
注意:在学习详细之前最好先看下关键字,无论是学习IT技术还是学习语言等其他知识。学习的过程就是深刻理解关键字的过程。如果对以下关键字都深刻理解就不用看下文。(上学更改成关键字学也不为过。关键字学好了就是合格的。)
1:int、double、float、char、void、char。
2:auto、extern、static、register。
一、变量的三大特点:
变量的数据类型:主要说明变量占用内存空间大小 如 int型。
变量的作用域:变量的有效性的范围,即:变量的使用范围。
变量的存储类型:变量在内存中的存储方式。不同的存储方式,影响变量在内存中的生存周期。
二:变量的数据类型:
变量的数据类型有:int,float,double,char 等详细请看其他资料。
三:变量的作用域:
1、局部变量:
1.1、定义:在一个函数内部或某个复合语句内部定义的变量称为局部变量。
1.2:特点:使用范围是定义它的函数或复合语句。
1.2.1:局部变量被放在动态存储区中,编译时候系统不为其分配存储单元,在程序运行到局部变量所在的函数时才为其分配内存单元。调用结束时,内存单元被释放。即变量的生存期是函数的调用时间。
1.2.2:局部变量在不同的函数可以同名。只要作用域不同他们不会冲突。如果变量名相同,则当前局部变量优先。
2、全局变量:
2.1、定义:在所有函数外部(当然也在main函数外部)定义的变量称为全局变量。
2.2、特点:全局变量的作用域从定义变量的位置开始到源程序结束,并且默认初始值为0。
2.2、全局变量存放在静态存储区中,在编译时给全局变量分配内存单元,直到程序运行结束变量才被释放。全局变量的生存期为整个程序运行期间。
2.3、若全局变量与局部变量同名局部变量在定义它的函数内优先。
2.4、如果要在定义之前使用局部变量,用extern加以声明可扩展全局变量的作用域。
四、变量的存储方式:
1. 变量的存储方式共有两种:静态存储和动态存储。
2. 变量的存储方式由变量的作用域和变量的存储类型共同决定、能仅从作用域上判断。
C存储类型共有四种:
1、auto:自动变量(编译器默认类型,简称系统默认)
2、register:寄存器变量
3、static:静态类型
4、extern:外部类型
auto类型详解:
如果未加类型存储类型说明默认为 auto类型
1.例子:int a=4; <=>auto int a=4;(<=>等价符号)。
2.形参变量属于自动变量。
3.自动变量属于局部变量。
register 类型详解:
寄存器类型跟普通类型区别:寄存器类型变量存放在CPU的寄存器中,速度比存放在内存中的变量操作速度快。一般将反复多次使用的变量放到寄存器中,以提高程序的运行速度。
static 类型变量
一、静态类型变量属于静态存储方式。属于静态存储方式的不一定是静态类型变量。如外部变量。
二、静态变量分为两种:静态局部变量和静态全局变量。
1:静态局部变量:在局部变量前加上存储类型说明符
static 就构成了静态局部变量。
1.1:静态局部变量与局部变量的区别:
1.1.1静态局部属于静态存储方式,局部变量属于动态存储方式。
1.1.2:定义域相同,仅限与定义他的函数,当函数调用结束后自动类型变量的值消失,而静态局部变量的值会一直在内存中,只是外部不能调用。当再次调用这个函数,静态变量的值继续有效并且等于上次调用结束的值。
例如:
Void testStatic ()
{
static int i=1;
printf(“%d\n”,i++);
}
int main()
{
testStatic () ;//结果是打印出 数字 1
testStatic ();// 第二次调用结果打印出 2 而不是1
return 0;
}
1.1.3生存期的区别:静态局部变量的生存期是整个程序运行期间,动态局部变量的生存期是函数调用结束。
1.1.4、系统自动为静态局部变量赋初始值 0,而自动变量的初值不确定。
静态全局变量
2:静态全局变量:
在全局变量前加上存储类型说明 static 就构成了静态全局变量。
2.1、静态全局变量与全局变量的区别:全局变量的作用域是整个程序。而静态变量的作用域是定义该变量的源文件。
总结:static 作用于局部变量改变了 局部变量的生存期。作用域全局变量改变了全局变量的使用范围。
Extern 类型变量详解:
一、extern类型定义:
外部类型是定义在所有函数之外的全局变量、在编译时候系统分配给其永久的存储空间
二、特点:
1.外部变量与静态变量一样,系统自动为未初始化的的变量赋予0值。
2.外部变量与全局变量一样,作用域为从定义到整个源程序结束
3.外部变量可以被其他文件使用,如只限定在本文件使用加static限定符。
例如:有文件a.c和文件b.c在b.c中定义外部变量int cctwl=520;
a.c文件内容如下:
main()
{
Extern int cctwl;//声明外部变量,编译器会自动找到b.c中的变量cctwl。
Printf(“%d”,cctwl);//结果520。
}
外部变量调用前必须用extern声明而外部函数的声明可以省略extern直接写出函数原型就可。系统默认加上extern。