C语⾔中static关键字的作⽤
static⽤法:
在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。
1、定义全局静态变量:在全局变量前⾯加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本⽂件内从定义开始到⽂件结束可见。
2、定义局部静态变量:在局部变量前⾯加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运⾏结束。
c. 其作⽤域为局部作⽤域,当定义它的函数或语句块结束时,其作⽤域随之结束。
1 #include <stdio.h>
2
3void fn(void)
4 {
5int n = 10;
6
7    printf("n=%d\n", n);
8    n++;
9    printf("n++=%d\n", n);
10 }
11
12void fn_static(void)
13 {
14static int n = 10;
15
16    printf("static n=%d\n", n);
17    n++;
18    printf("n++=%d\n", n);
19 }
20
21int main(void)
22 {
23    fn();
24    printf("--------------------\n");
25    fn_static();
26    printf("--------------------\n");
27    fn();
28    printf("--------------------\n");
static修饰的变量
29    fn_static();
30
31return0;
32 }
-> % ./a.out
n=10
n++=11
--------------------
static n=10
n++=11
--------------------
n=10
n++=11
--------------------
static n=11
n++=12
3、定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源⽂件中使⽤
b.在⽂件作⽤域中声明的inline函数默认为static类型
/* file1.c */
#include <stdio.h>
static void fun(void)
{
printf("hello from fun.\n");
}
int main(void)
{
fun();
fun1();
return0;
}
/* file2.c */
#include <stdio.h>
static void fun1(void)
{
printf("hello from static fun1.\n");
}
/tmp/cc2VMzGR.o:在函数‘main’中:
static_fun.c:(.text+0x20):对‘fun1’未定义的引⽤
collect2: error: ld returned 1 exit status
总结:⽤static定义的全局和局部静态变量的区别是,全局的静态变量的作⽤域和可见域都是从⽂件的定义开始到整个⽂件结束;⽽局部的静态变量可见域是从⽂件的定义开始到整个⽂件结束,作⽤域是从该语句块的定义开始到该语句块结束。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。