小记static关键字的用法-创新互联
- 前言
- 一、修饰变量
- C代码
- 运行结果
- 二、修饰函数
- 总结
前言
偶然间看到了陈正冲老师的《C语言深度剖析》,突然觉得自己该重拾C语言了(其实是书写得太好了,忍不住想学)。在原来已经学过一点点的基础上打算再补充一些,可能会有一系列笔记吧,立个flag争取在寒假之前把这本书看完。
一、修饰变量
根据定义范围的不同,变量分为静态局部变量和静态全局变量,但它们都存在内存的静态区。
(1)静态全局变量:作用域仅限于变量被定义的文件中(如.c和.h文件),其他文件即使用 extern 声明也没法使用。作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。若在定义之前使用需在前面加extern,所以一般直接在文件顶端定义即可。
(2)静态局部变量:在函数体里面定义的,就只能在这个函数里使用。若函数结束运行,则在函数里面定义的值仍会保留在内存的静态存储区
#includestatic int j = 0;//静态全局变量
void fun1(void)
{static int i = 0;//静态局部变量
i++;
printf("func1:%d \t",i);
}
void fun2(void)
{int j = 0;
j++;
printf("func2:%d",j);
}
int main()
{for(int k=0; k<10; k++)
{fun1();
fun2();
printf("\n");
printf("-----------------------");
printf("\n");
}
return 0;
}
运行结果
经过仔细一想,原本全局变量的意思是在该文件夹(.c/.h)中使用,而将静态全局变量去掉static后变成全局变量结果是一样的不会变即j还是等于1。而局部变量的生存域是在函数中,只能在函数中使用,函数使用完之后是会销毁的,若在其他地方使用会报错提醒你没有定义该变量;在加上static后,则将值存储到了静态存储区,是不是可以认为间接的变为了“全局变量”呢?但是作用域仅在函数中。这样一来就明白了
函数前面加static修饰就变成了静态函数,即对函数的作用域仅局限于本文件。不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。就算同名也没关系,因为在不同的文件中即有不同的作用域。
第一种含义:表示退出一个块后仍然存在的局部变量
引申的第二种含义:用来表示不能被其它文件访问的全局变量和函数。
学习到了static的用法,但是还要在实际中多运用才能熟悉。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享题目:小记static关键字的用法-创新互联
网页链接:http://scyanting.com/article/pepcd.html