关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
1、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2、 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3、在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,但是很少的人能懂得第三部分。做为一个合格的软件工程师,我们要懂得第三部分的作用,要懂得本地化数据和代码范围的好处和重要性。

int testStatic()
{
 int x=1;
 x++;
 return x;
}
main()
{
 int i;
 for(i=0;i<5;i++)
 printf("%d/n",testStatic());
}

输出为:

2

2

2

2

2

int testStatic()
{
 static  int x=1;
 x++;
 return x;
}
main()
{
 int i;
 for(i=0;i<5;i++)
 printf("%d/n",testStatic());
}

输出为:

2

3

4

5

6

const 有什么用途?

(1)可以定义 const 常量

(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
  const意味着"只读"。区别如下代码的功能非常重要。

const int a;
int const a;
const int *a;
int * const a;
int const * a const;
  • 前两个作用是一样的,a是一个常整型数。
  • 第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
  • 第四个意思是a是一个指向整型数的常指针(也就是,指针指向的整型数是可以修改的,但指针是不可修改的)。
  • 最后一个意味着a是一个指向常整型数的常指针(也就是,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

  (1)关键字const的作用是为给读你代码的人传达非常有用的信息。例如,在函数的形参前添加const关键字意味着这个参数在函数体内不会被修改,属于"输入参数"。在有多个形参的时候,函数的调用者可以凭借参数前是否有const关键字,清晰的辨别哪些是输入参数,哪些是可能的输出参数。

  (2)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改,这样可以减少bug的出现。

  const在C++语言中则包含了更丰富的含义,而在C语言中仅意味着:"只能读的普通变量",可以称其为"不能改变的变量"(这个说法似乎很拗口,但却最准确的表达了C语言中const的本质),在编译阶段需要的常数仍然只能以#define宏定义!故在C语言中如下程序是非法的:

const int SIZE = 10;
char a[SIZE]; /* 非法:编译阶段不能用到变量 */

以下是工作中的使用const例子:

const unsigned char *  pbyData;

unsigned char const DayPerMonth[12] = { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 } ;

extern void dp_write_dsp_block ( const word *bp, word len );

const unsigned short  cnstUni2InterMapSparseIdx[];

volatile问题:

volatile的语法与const是一样的,但是volatile的意思是“在编译器认识的范围外,这个数据可以被改变”。不知何故,环境正在改变数据(可能通过多任务处理),所以,volatile告诉编译器不要擅自作出有关数据的任何假设——在优化起家这是特别重要的。如果编译器说:“我已经吧数据读入寄存器,而且在没有与寄存器接触。”在一般情况下,它不需要再读入这个数据。但是,如果数据是volatile修饰的,编译器则是不能做出这样的假定,因为数据可能被其他进程改变了,编译器必须重新读这个数据而不是优化这个代码。就像建立const对象一样,程序员也可以建立volatile对象,甚至还建立const volatile对象。这个对象不能被程序员改变,但可通过外面的工具改变。

volatile对象每次被访问时必须重新读取这个变量的值,而不是用保存在寄存器中的备份。下面时volatile变量的几个例子:

.并行设备的硬件寄存器(如状态寄存器);

.一个中断服务子程序中会访问到的非自动变量(Non-automatic variables);

.多现成应用中被几个任务共享的变量。

一个参数可以const同时也是volatile,一个指针也是可以为volatile的,但是具体编程时要小心,要保证不被意外修改。

关键字static、const、volatile的作用相关推荐

  1. java中关键字volatile的作用(转载)

    转载:http://blog.csdn.net/orzorz/article/details/4319055 用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对 ...

  2. java 关键字volatile的作用

    用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...

  3. 以下关于c语言中static和const,c语言中static const作用

    c语言中static const作用 (2012-06-21 07:51:08) 标签: it 关键字static: 1. 在函数体内,一个被声明为静态的变量在这一个函数被调用的过程中维持其值不变. ...

  4. 关键字static的作用是什么?

    1. 关键字static的作用是什么? 正确答案: 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维 ...

  5. 关键字static的作用

    1. 关键字static的作用是什么? 正确答案: 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维 ...

  6. C语言复习之关键字static的作用

    关键字static有三个明显的作用,简而言之就是: 1)如果修饰局部变量,改变局部变量的生存周期: 2)如果修饰全局变量和函数,改变其作用域(作用域由原来的整个工程变为在本文件内).

  7. C/C++关键字 static 和 const

    C/C++关键字 static 和 const 一.关键字static 参考:https://www.cnblogs.com/BeyondAnyTime/p/2542315.html 1. 静态全局变 ...

  8. 每日一题(17)—— 关键字volatile的作用和三个不同的应用场合

    关键字volatile的作用和三个不同的应用场合 作用:防止编译器优化: (1)并行设备的硬件寄存器(如状态寄存器):// #define S5PV210_GPIO_DATA (*(volatile ...

  9. static在c语言中的作用_C语言关键字 static 的用法

    接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...

最新文章

  1. 用python下载文件的若干种方法汇总
  2. 基于深度学习的目标检测技术的演进:从R-CNN到Faster R-CNN
  3. oracle:connect by start
  4. 用计算机语言编写的完成一定功能,C+的+预备知识.ppt
  5. 读书越多会越孤独吗?
  6. securecrt 连接配置存放目录_SecureCRT 迁移到新环境,导出配置文件目录 转(示例代码)...
  7. 关于web自动化操作的分析和基类的实现
  8. 伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!
  9. mybatis insert 重复数据2条_Mybatis框架lt;增gt;:添加一条数据到数据库中,insert...
  10. Android进程间通信(复习笔记)
  11. python---windows中的文件路径书写的错误
  12. qt怎么连接oracle,Qt连接Oracle数据库详细介绍(QOCI)
  13. 华为交换机:基于IP子网划分VLAN
  14. YNWA,同样是我们普通人的鞭策
  15. JavaScript实现:抽奖活动
  16. 植物大战僵尸修改金币以及关卡
  17. 仿班级聊天室(DOM原型法)并且用localStorage存储消息记录
  18. 高等数学(第七版)同济大学 习题12-4 个人解答
  19. c++ STL 算法一
  20. Java: 聚合数据API接口调用城市天气预报

热门文章

  1. RabbitMQ 高可用之如何确保消息成功消费
  2. 069_html统一资源定位器
  3. visual studio 2008 html中调用外部css文件,的Visual Studio 2008 IDE冻结/崩溃打开.aspx文件中使用CSS时包括...
  4. layui时间怎么设置年月日时分秒_安卓手机便签敬业签到时间提醒后怎么设置延时30分钟再提醒?...
  5. mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?
  6. Jmeter分布式压测方案
  7. java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
  8. CentOS 迎来更新换代版本 CentOS Stream 9 附下载镜像OS地址
  9. php查询每个小时的数据,php – MySQL显示表中每小时的条目数
  10. 安装系统要求错误_【船机帮】康明斯船用柴油机燃油系统的安装要求