static 用法

看了公司的一些源码,有些函数前面带个static 哥当时就不淡定了,这玩意杂用,为什么用?一直绕着我。是否新手和我一样有着困惑,我现在就全面给大家说下static 只限于c,c++俺不太懂。

首先大家要了解一下 一个程序的存贮空间,eg:

*****************************

static int k = 9                 全局静态存储区

   int a=10                       全局静态存储区

 

void fun()

{

   int i=1;

   static int j=1;

  i++;

  j++;

 printf("i=%d\n",i);

 printf("j=%d\n",j);

}

int main()

{

    int i=1;                                         栈存储区

    static j=1;                                     全局静态存储区

    char[8]={"abc"};                            文字存储区

    int *head=malloc(sizeof(int*2));  // 堆存贮区

    fun();

   fun();

  fun();

 

}

运行次程序,看会打印出什么,

i=2,j=2;

i=2,j =3;

i=2,j=4;

i的值在栈中存储,fun()函数调用完后,i值就消失了。j在全局静态变量存储着,fun()调用完后,j值仍然保存。

 

static修饰函数时,起到封装函数的作用。eg:

a.c中

static void fun()

{

  ..

}

b.c这个文件中则调用不出来fun()这个函数;

 

 

static 修饰全局变量时:

a.c

static int i=1;

int j=2;

main()

{

 

}

     

b.c中:

可以通过extern j,和extern i;

编译可以通过,但是运行时候出错,因为i是static,起到隐藏封装作用,只对a.c起到作用,其他文件引用将报错;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值