C语言-变量详解

变量声明的标准格式

存储类型 数据类型 变量名。例如: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.cb.c中定义外部变量int cctwl=520

a.c文件内容如下:

main()

{

Extern int cctwl;//声明外部变量,编译器会自动找到b.c中的变量cctwl

Printf(“%d”,cctwl;//结果520

}

外部变量调用前必须用extern声明而外部函数的声明可以省略extern直接写出函数原型就可。系统默认加上extern


你可能感兴趣的:(c,存储,扩展,语言,float,编译器)