c语言变量详解(1)



一、变量的三大特点:

      变量的数据类型:主要说明变量占用内存空间大小 如 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=0;

i ;

printf(“%d”,i);

 

}

Main()

{

TestStatic () //结果是打印出 数字 1

TestStatic ()// 第二次调用结果打印出 2

//静态变量的第二次调用 不执行 static int i=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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章