关于C/C++中静态本地变量的使用与数据类型修饰符const
来源:互联网 发布:2016淘宝直通车 编辑:程序博客网 时间:2024/05/17 02:41
关键字static
生存期:整个函数运行期间;作用域:最近包含它的一对大括号
静态本地变量
可以被赋上新值,static在C语言中是表示一个变量为静态变量的,而不是常量,也不是不可变的变量。所谓的静态变量有两种情况,一种是静态全局变量,一种是静态局部变量。
先说静态局部变量:通常情况下,在一个函数中定义一个变量,那么函数退出之后,这个变量就消失了,即使你第二次调用这个函数,里面的变量也会被重新赋初值。比如我们写一个函数:
int fun(int a)
{int sum;
sum=sum+a;
return sum;}
这样无论你是第几次调用fun这个函数,sum都会重新被赋初值,也就是函数的返回值一直会是a;而不会出现多次调用累加的情况。
但如果你在一个函数中,用static来声明变量,那么这个变量虽然在函数外部不可用,但退出函数时,这个变量是不会消失的,下一次再调用这个函数,里面的值仍然存在。就说上面这个函数,如果你的第一句写成static int sum;那么你第一次调用fun(3);函数返回3,第二次再调用fun(5);函数返回值是8,因为第一次调用之后的sum=3的值不会消失。
另一种是静态全局变量。因为是全局变量,不存在退出函数消不消失的问题。所以静态全局变量和普通全局变量的区别是:普通全局变量在其他源文件中可以通过extern全局变量名的声明,来使用该变量,而静态全局变量只能在变量所在的文件中使用,即使你在其他文件中使用extern声明也不可以使用,这样可以有效避免不同文件全局变量的冲突。
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。
const关键字的作用主要有以下几点:
(1)可以定义const常量,具有不可变性。 例如:
const int Max=100; int Array[Max];
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;
(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 例如:
void f(const int i) { i=10;//error! }
(5) 为函数重载提供了一个参考。
class A { ......
void f(int i) {......} //一个函数
void f(int i) const {......} //上一个函数的重载 ......
};
(6) 可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
(7) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
- 关于C/C++中静态本地变量的使用与数据类型修饰符const
- 修改C中const修饰的变量
- 【C++】用const修饰变量与define的区别
- c语言中const修饰指针变量
- C++对C语言的非面向对象特性扩充(1)-- 注释、输入输出、局部变量说明、C++中const修饰符与C中的#define
- C修饰符const
- c语言中关于const的使用
- C/C++中const修饰符总结
- C/C++中const修饰符的用法总结
- 不一样的C语言-const修饰的变量
- 黑马程序员—C学习笔记—static和const修饰的全局与局部变量
- [C++] C++中const修饰指针,变量, 函数参数和函数返回值的用法总结
- 变量与C的数据类型
- C/C++ const 修饰符的作用
- C/C++ const 修饰指针变量
- C语言 数据类型修饰符与存储类修饰符
- C语言const的修饰
- 关于C/C++中的const变量与const指…
- 页面查询秒加载,方案总结
- Static与全局与局部变量的区别
- 使用Visual Studio 2017作为Linux C++开发工具
- 基础篇:让线程停止运行的几种方式(七)
- 树莓派中文输入法
- 关于C/C++中静态本地变量的使用与数据类型修饰符const
- 在android studio里修改jar包
- 数字图像处理——大津法实现图像二值化
- POJ3494
- 543. Diameter of Binary Tree
- Linux格式化U盘
- javaSE_08Java中static、继承、重写
- Ubuntu 14.10 apt-get update 404错误
- 使用浏览器