变量c语言中static的作用(精辟分析)

static的作用  时间:2021-02-28  阅读:()

static的作用(精辟分析)

在C语言中 static的字面意思很容易把我们导入歧途其实它的作用有三条。

1先来介绍它的第一条也是最重要的一条隐藏。

当我们同时编译多个文件时 所有未加st atic前缀的全局变量和函数都具有全局可见性。为理解这句话我举例来说明。我们要同时编译两个源文件一个是a.c另一个是ma in.c。下面是ac的内容char a ='A'; //global variablevoid msg()

{printf("Hel lo\n");

}

下面是mai nc的内容int main(void)

{extern char a; //extern variable must be declared before useprintf("%c ", a);

(v o i d)ms g();return 0;

}

程序的运行结果是

A Hel lo

你可能会问为什么在a.c中定义的全局变量a和函数msg能在main.c中使用前面说过所有未加st atic前缀的全局变量和函数都具有全局可见性其它的源文件也能访问。此例中 a是全局变量msg是函数并且都没有加static前缀 因此对于另外 的源文件ma in.c是可见的。如果加了st atic就会对其它源文件隐藏。例如在a和m sg的定义前加上stat icmain.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量而不必担心命名冲突。 Static可以用作函数和变量的前缀对于函数来讲static的作用仅限于隐藏而对于变量static还有下面两个作用。

2 static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化也是唯一的一次初始化。共有两种变量存储在静态存储区全局变量和s tatic变量只不过和全局变量比起来static可以控制变量的可见范围说到底static还是用来隐藏的。虽然这种用法不常见但我还是举一个例子。

#include <stdio.h>

int fun(void){static int count= 10; //事实上此赋值语句从来没有执行过return count--;

}int count =1;int main(void)

{printf("global\t\tlocal static\n");for(; count <= 10; ++count)printf("%d\t\t%d\n", count, fun());return 0;

}

程序的运行结果是global local static

1 10

2 9

3 8

4 7

5 6

6 5

7 4

8 3

9 2

10 1

3static的第三个作用是默认初始化为0。其实全局变量也具备这一属性因为全局变量也存储在静态数据区。在静态数据区 内存中所有的字节默认值都是0x00某些时候这一特点可以减少程序员的工作量。 比如初始化一个稀疏矩阵我们可以一个一个地把所有元素都置0然后把不是0的几个元素赋值。如果定义成静态的就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用但又觉得每次在字符数组末尾加’ \0’太麻烦。如果把字符串定义成静态的就省去了这个麻烦 因为那里本来就是’ \0’ 。不妨做个小实验验证一下。

#include <stdio.h>int a;

int main(void)

{int i;staticcharstr[10];printf("integer:%d; string: (begin)%s(end)", a, str);return 0;

}

程序的运行结果如下integer: 0; string: (begin)(end)

最后对static的三条作用做一句话总结。首先stat ic的最主要功能是隐藏其次因为st atic变量存放在静态存储区所以它具备持久性和默认值0。

VoLLcloud(月付低至2.8刀)香港vps大带宽,三网直连

VoLLcloud LLC是一家成立于2020年12月互联网服务提供商企业,于2021年1月份投入云计算应用服务,为广大用户群体提供云服务平台,已经多个数据中心部署云计算中心,其中包括亚洲、美国、欧洲等地区,拥有自己的研发和技术服务团队。现七夕将至,VoLLcloud LLC 推出亚洲地区(香港)所有产品7折优惠,该产品为CMI线路,去程三网163,回程三网CMI线路,默认赠送 2G DDoS/C...

80VPS:香港服务器月付420元;美国CN2 GIA独服月付650元;香港/日本/韩国/美国多IP站群服务器750元/月

80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...

ThomasHost(月付5美元)美国/法国/英国/加拿大KVM,支持Windows

ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...

static的作用为你推荐
真正免费的网络电话谁知道哪个真正免费的网络电话啊?告诉我把3?太感谢了中国电信互联星空怎么在中国电信网上营业厅自行开通互联星空消费权限打开网页出现错误网页出现错误怎么解决?要最简单的那种照片转手绘照片转手绘用什么APPgodaddyGO DADDY服务器空间域名怎么样安全漏洞如何发现系统安全漏洞小米手柄手机用小米手柄能玩什么游戏微信怎么看聊天记录微信如何查找聊天记录防钓鱼游戏中的防钓鱼检查是什么?请客网如何邀请客户吃饭
代理主机 虚拟空间免费试用 国外服务器租用 香港服务器99idc 68.168.16.150 免费网站监控 mobaxterm godaddy优惠券 seovip 申请个人网页 共享主机 linux服务器维护 个人免费主页 重庆电信服务器托管 上海电信测速 中国linux 云服务器比较 群英网络 徐州电信 supercache 更多