由static引发的问题

来源:互联网 发布:点对点下载软件 编辑:程序博客网 时间:2024/05/16 06:01

局部变量:

             在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们。这称为局部变量。

 

全局变量:

             而在函数之外定义的变量称为外部变量,也称全局变量。全局变量可以为本文件中其他函数所共用。它的有效范围从定义变量的位置开始到本源文件结束。

 

 

示例代码:

 

/*
**    Copyright(C)[2010].All rights reserved.
**    Filename:    test_static.c
**    Description:
**    Author        Time        Version        State
**    Junjie Li    2010-11-21    V0.0.1        create
*/
#include <stdio.h>

static int j;

void fun1(void)
{
    static int i=0;
    i++;
    printf( "&i=%p/ti=%d/n", &i, i );
}

void fun2(void)
{
    j=0;
    j++;
    printf( "j=%d/n",j );
}

int main( int argc, char **argv )
{
    int k;

    for ( k=0; k<10; k++)
    {
        fun1();
        fun2();
    }   

    return 0;
}

 

运行下看看结果;

再把那个static int i=0; 中的static 去掉再看看是什么结果?

 

结论:被static修饰的局部变量存放在静态区。即使函数运行结束。静态变量的值也不会销毁。函数下次使用时仍然能用到这个值

而一般的局部变量在函数返回时就自动销毁了。就是上面讲过的栈变量

 

简易结论是:栈变量(包括局部变量)在函数返回的时候会自动销毁。就是说没有了。不能用了。

原创粉丝点击