打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
static,const,volatile使用简介


(2012-03-14 11:48:17)作者:日夜兼程
1.       static
(1)    static声明变量
声明局部变量:可以使局部变量值在函数掉用后不消失,即起占用的存储单元不释放
    特点------只能被本函数调用,(因此,声明为静态变量只能扩大函数的
    生存周期,而不能扩大生存范围)
声明外部变量:可以限制外部变量只被本文件(.C文件)引用.(同上面的声明达到了同
    样的效果,不过生存范围被相对缩小)
(2)    static声明函数
只能在本文件中被使用的函数;如果在不同文件中有相同的函数,互不干扰.
(3)    例 (声明局部变量)
  main()
   {
    int a = 2,i;
    for(i = 0;i < 3;i++)
    printf(“%d”,f(a));
   }
  f(int a)
  {
    int b = 0;
    int static c = 3;
    b = b + 1;
    c = c + 1;
    return(a+b+c);
  }
  运行结果:7 8 9
2.       const
  const 限定一个变量为只读变量.
(1)    const在C和C++中的区别
>>
const int n = 5;
int a[n];
在ANSI C中以上程序是错误的,因为只读变量不等于常量. 常量只能”只读”,在内存空间中没有
被分配内存;而”只读变量”是要在内存中开辟空间来存放其值的,但是这个值由编译器限定,不许
修改,编译器在编译时并不知道它在编译时的值.
在C++中以上程序是正确的,
>>
const int n;
在ANSI C中这是正确的,C编译器把它当作一个声明,认为在别处为其分配了空间
在C++中这是错误的.如果不初始化,则必须改为extern const int n,才能通过编译
另外C++ 编译器一般也不为CONST分配存储空间,而是将其放入符号表,以加快编译速度.
(2)    const在指针中的应用
int b =500
int const int* a = &b        //内存地址不固定,但内存中存放的数据固定
int const *a =&b             //同上
int* const a =&b             //内存地址固定但内存中存放的数据不固定
const int* const a = &b  //内存地址固定,内存中存放的数据固定
总结:
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量
                              如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常
                              量

3.       volatile
本意是易变的,瞬时的.用它声明的类型变量可以被某些编译器的未知因素更改.
例1.
volatile int i = 10;
int a = i;

int b = i;
编译器优化的做法是,由于编译器两次从 i读数据的代码之间没有对i进行多操作,它会自动把上次读的
数据放在b中.而不是从i的内存中读.这样,如i一个既存器变量或者表示一个端口数据就容易出错.
加了volatile则表明i是随时可能发生变化的,每次使用的时候必须从I的内存地址中度区,因而编译器产
生的汇编代码会从i的地址读取数据放到b中.
例2.
void main()
{
volatile int i=10;
int a = i;
printf("i= %dn",a);
    __asm {
mov dword ptr [ebp-4], 20h
}
int b = i;
printf("i= %dn",b);
}  
debug 模式下运行结果如下:
i = 10
i = 32
Release 模式下运行结果如下:
i =10
i = 10
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言的36个关键字
嵌入式编程中关于const,static,extern,volatile的用法
C语言32个关键字
vc中 volatile 的作用_酷都
C语言中volatile关键字-学院-黑基网
c++拷贝构造函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服