static的作用与使用介绍

static的作用非常的大,在实际应用中经常出现,因此,也常常作为面试官的面试题之一。

它的用处,在其他地方均可找到,本文不再累赘,但是,具体是如何实现以上的作用呢?

本文通过下面的例子,给大家介绍这个staic的常规用法:

代码部分:

#include <stdio.h>

/*
*static ,常常使用在两种情况下:变量和函数
* 1.变量:static定义的变量不会在函数重新进入时再次赋初值;不会在函数结束时而释放(存储在全局区);不会在循环中多次赋初值
* 2.函数:static定义的函数只能在本文件中调用,不能在其他文件中调用
*/

void test_call(void);
static int test_func_call_1(void);

int main()
{
        int flag1 = 0;
        int flag2 = 0 ;
        int times = 10;

        /*in a while circle, the variable of i defined by static int don't change to be the initial value*/
        while(times--)
        {   
                static int i = 1; //while循环中,并没有多次赋初值,仅仅有第一次的赋初值操作
                if(i == 1)
                {   
                        flag1 += 1;
                        printf("flag1 = %d \n",flag1);
                }   

                i = i+1; //可以进行赋值操作(赋值与赋初值不同)

                if(i >= 2)
                {    
                        flag2 += 2;
                        printf("flag2 = %d \n",flag2;
                  
                }   
    
        }   

        /*test:the variable in a function call*/
        times =5; 
        while(times--)
        {   
                test_call();  //多次调用函数;但是,不会多次对static的变量赋初值
        }   


        /*test: call the function declared by static in different file */
        test_func_call_1(); //it can be called because in the same file, but it can't be invoke by the function in other files
    
        //invoke a static int function in other file
        //无法调用,编译时汇报没有定义。(毕竟static了,只对内部文件可见) 
        //test_func_call_2(); //undefined!

        //invoke an int function in other file
        //这个函数并不是staic的,是可以调用的(只要是一起编译,或者是添加头文件,添加声明)
        test_func_call_3();

        return 0;
}

void test_call(void)
{
        static int flag3 = 1; //并不会每次进来都赋初值为1,只执行第一次
        if(flag3 == 1)
        {
                printf("I am in flag3 == 1!\n");
                flag3++; //it changes 仍然能够进行其他的赋值操作
        }
        else
        {
                printf("I am not in flag3 == 1!!!\n");
        }
}

static int test_func_call_1(void)
{
        printf("It is a static function call...\n");
}
#include <stdio.h>

/*it can't be invoked by other files*/
//它并不能被其他文件的函数调用,只能给同一文件的函数调用
static int test_func_call_2(void)
{
        printf("I am in other file!\n");
        return 0;
}

//此函数将给外部函数调用
int test_func_call_3(void)
{
        /*but it can be called by the func in the same file*/
        //在本文件中,调用static文件,可行
        test_func_call_2();
        return 0;
}

出错,如果直接调用static的函数:
在这里插入图片描述

运行结果:
在这里插入图片描述

结果分析:
①尽管调用多次static int,但flag1仅出现一次,表明仅完成一次赋初值操作;
②flag2出现不同的值,说明,static int的变量能够进行改变值的操作,自加,自减,赋值(不同于定义时候的赋初值)都行。
③flag3部分仅进入一次,理由同①,只不过是函数调用而已;
④static的函数想要调用,必须在其同文件下,创建一个调用static函数的常规的函数,然后在另外一个文件下调用这个常规函数。

谢谢大家~

如若有问题,欢迎讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值