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 icmain.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
3static的第三个作用是默认初始化为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。
博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...
一、麻花云官网点击直达麻花云官方网站二、活动方案优惠码:专属优惠码:F1B07B 享受85折优惠。点击访问活动链接最新活动 :五一狂欢 惠战到底 香港云主机 1.9折起香港特价体验云主机CN2 云服务器最新上线KVM架构,,默认40G SSD,+10G自带一个IPv4,免费10Gbps防御,CPU内存带宽价格购买1核1G1M19元首月链接2核2G 2M92元/3个月链接2核4G3M112元/3个月...
对于Megalayer云服务器提供商在之前也有对于他们家的美国服务器和香港服务器进行过评测和介绍,但是对于大部分网友来说需要独立服务器和站群服务器并不是特别的普及,我们很多网友使用较多的还是云服务器或者VPS主机比较多。在前面也有在"Megalayer新增香港VPS主机 1GB内存 50GB SSD 2M带宽 月59元"文章中有介绍到Megalayer商家有新增香港CN2优化VPS主机。那时候看这...