码迷,mamicode.com
首页 > 编程语言 > 详细

C语言(四)变量的作用域

时间:2015-02-05 15:03:43      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:c   变量类型   

一、变量的作用域

    C语言根据变量的作用域不同,将变量分为局部变量和全局变量。
1.局部变量
1)定义:在函数内部定义的函数,称为局部变量。形参也属于局部变量。
2)作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

2.全局变量
1)定义:在所有函数外部定义的变量,称为全局变量。

2)作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以再其定义位置之后共享。


二、变量的存储类型

    变量存储类型就是指变量存储在什么地方。
    有三个地方可以存储变量:普通内存、运行时堆栈、硬件寄存器。
    变量的存储类型决定了变量何时创建、何时销毁,也就是变量的声明周期。
    C语言根据变量的存储类型分为:自动变量、静态变量、寄存器变量。

1.自动变量
void test(int a,int b){
	int c =a+b;
	auto int d;
}
1)定义:自动变量是存储在堆栈中的。
2)哪些是自动变量:auto关键字修饰的局部变量,但是基本上是废的,因为所有的局部变量在默认情况下都是自动变量。
3)生命周期:
    在程序执行到声明自动变量的代码块(函数)时,自动变量才会被创建,当自动变量所在的代码块(函数)执行完毕后,这些变量就会自动销毁。如果这一个函数重复调用,这些自动变量每次都会重新创建。

2.静态变量
#include <stdio.h>
#include "one.h"
#include "two.h"
int a ;//静态变量
void test2(){
	static int b=0;//静态变量
	b++	;
}
int main(){
	test2();
	printf("%d\n",b);
	return 0;
}
1)定义:静态变量是存储在静态内存中的,也就是不属于堆栈。
2)哪些是静态变量
    所有的全局变量都是静态变量
    被static 关键字修饰的局部变量也是
3)生命周期
    静态变量是在程序运行之前被创建的,在程序的整个运行期间始终存在,直到程序结束。
4)生命周期和作用域的理解
    上面个的变量a,在代码执行到该行时,创建一个静态变量,存储在静态内存中。
    作用域:在该行代码之后。生命周期:整个程序运行期间。
    变量b是在函数内部定义的,在第一次调用函数的时候被创建,存储在静态内存中,第二次调用函数时,该行不被执行。作用域:函数内部。生命周期:整个程序运行期间。

3.寄存器变量
1)定义:存储在一个硬件寄存器中的变量,称为“寄存器变量”。寄存器变比存储在内存中的变量访问效率更高。默认情况下:自动变量和静态变量都是存储在内存中的,只是静态变量是存储在静态内存中的。
2)哪些变量是寄存器变量
    register关键字修饰的自动变量。
    只有自动变量才可能是寄存器变量。
    寄存器变量只限于int、char、指针。
3)生命周期
    因为寄存器变量本身就是自动变量,所以函数中的寄存器变量-在调用函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。
4)使用注意
    由于计算机中寄存器数目有限,不能使用太多的寄存器标量。如果寄存器使用饱和时,程序将寄存器变量将自动转化为自动变量处理。

总结:
    
按作用域分:全局变量和局部变量
    全局变量:在函数外声明的变量
    局部变量:函数内部和函数形参
按存储位置分:自动变量、静态变量、寄存器变量        
    自动变量:所有的局部变量
    静态变量:全局变量和static修饰的局部变量
    寄存器变量:register修饰的局部变量。






















C语言(四)变量的作用域

标签:c   变量类型   

原文地址:http://blog.csdn.net/z18789231876/article/details/43527477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!