程序编写规范、优化时使用的关键字含义
2016-01-18 13:05
253 查看
最名不符实的关键字----static
不要误以为关键字 static 很安静,其实它一点也不安静。这个关键字在 C 语言里主要有两个作用
1、修饰变量
第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法
使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些
代码行也不能使用它。想要使用就得在前面再加 extern ***。恶心吧?要想不恶心,很简单,
直接在文件顶端定义不就得了。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他
函数也用不了。由于被 static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结
束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
static int j;
void fun1( void)
{
static inti = 0;
i ++;
}
void fun2( void)
{
j = 0;
j++;
}
intmain()
{
for(k=0; k<10; k++)
{
fun1();
fun2();
}
return 0;
2,修饰函数
第二个作用:修饰函数。函数前加 static 使得函数成为静态函数。但此处“static”的含义
不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函
数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件
中的函数同名。
关键字 static 有着不寻常的历史。起初,在 C 中引入关键字 static 是为了表示退出一个
块后仍然存在的局部变量。随后, static 在 C 中有了第二种含义:用来表示不能被其它文件
访问的全局变量和函数。为了避免引入新的关键字,所以仍使用 static 关键字来表示这第二
种含义。
Static
6. 关键字 static 的作用是什么?
这个简单的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:
(1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
(2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
(3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然
不懂得本地化数据和代码范围的好处和重要性。
static关键字的含义:
static可以声明局部变量,有时候希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。
例子:考察静态局部变量的值
int Add(int a)
{
auto b=0;
static c=3;
b=b+1;
c=c+1;
return (a+b+c);
}
void main(void)
{
int a =2,i;
for(i=0;i<3;i++)
{
printf("%d",Add(a));
}
}
对静态局部变量的说明:
1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而Auto自动变量(即动态局部变量)属于
动态存储类别,占动态存储空间,函数调用结束后即释放
2)静态局部变量在编译时候赋初值一次;而对自动变量赋初始值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句
3)r如果在定义局部变量时不赋值的话,则对静态局部变量来说,编译时自动赋初始值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,
如果不赋予则它的值是一个不确定的值
不要误以为关键字 static 很安静,其实它一点也不安静。这个关键字在 C 语言里主要有两个作用
1、修饰变量
第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法
使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些
代码行也不能使用它。想要使用就得在前面再加 extern ***。恶心吧?要想不恶心,很简单,
直接在文件顶端定义不就得了。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他
函数也用不了。由于被 static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结
束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
static int j;
void fun1( void)
{
static inti = 0;
i ++;
}
void fun2( void)
{
j = 0;
j++;
}
intmain()
{
for(k=0; k<10; k++)
{
fun1();
fun2();
}
return 0;
2,修饰函数
第二个作用:修饰函数。函数前加 static 使得函数成为静态函数。但此处“static”的含义
不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函
数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件
中的函数同名。
关键字 static 有着不寻常的历史。起初,在 C 中引入关键字 static 是为了表示退出一个
块后仍然存在的局部变量。随后, static 在 C 中有了第二种含义:用来表示不能被其它文件
访问的全局变量和函数。为了避免引入新的关键字,所以仍使用 static 关键字来表示这第二
种含义。
Static
6. 关键字 static 的作用是什么?
这个简单的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:
(1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
(2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
(3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然
不懂得本地化数据和代码范围的好处和重要性。
static关键字的含义:
static可以声明局部变量,有时候希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。
例子:考察静态局部变量的值
int Add(int a)
{
auto b=0;
static c=3;
b=b+1;
c=c+1;
return (a+b+c);
}
void main(void)
{
int a =2,i;
for(i=0;i<3;i++)
{
printf("%d",Add(a));
}
}
对静态局部变量的说明:
1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而Auto自动变量(即动态局部变量)属于
动态存储类别,占动态存储空间,函数调用结束后即释放
2)静态局部变量在编译时候赋初值一次;而对自动变量赋初始值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句
3)r如果在定义局部变量时不赋值的话,则对静态局部变量来说,编译时自动赋初始值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,
如果不赋予则它的值是一个不确定的值
相关文章推荐
- django向view传递数据
- 我的日记(1)
- 终止继承:Final类和Final方法
- react资料汇总
- iOS9之后支付宝的回调以及iOS8之后提示框UIAlertController
- 从零开始搭建架构实施Android项目
- Vim命令详解
- MyEclipse2014 优化设置
- KMP算法解析
- FMDB 数据库的基本写法
- JVM分析工具链(二) - jmap和jhat
- SlidingMenu源码分析-附自定义底部滑出菜单控件
- UILabel设置富文本格式显示
- 使用html5shiv让IE6~8支持HTML5
- Lightoj 1281 (二维最短路)
- @ResponseBody-------springMVC
- 多维数组
- web压力测试 - http_load
- 【移动端debug-3】部分安卓机型不触发touchend事件的解决方案
- 使用html5shiv让IE6~8支持HTML5