博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C语言】类型限定词
阅读量:6632 次
发布时间:2019-06-25

本文共 1899 字,大约阅读时间需要 6 分钟。

ANSI C 的类型限定词有const、volatile以及restrict三个,以下分别介绍三个限定词:

1、类型限定词const

(1)、如果变量中带有const关键字,则该变量无法进行赋值、增量及减量运算来修改改变量的值

例如:  const int nochange;    //把nochange限定为常量

     nochange = 12;      //不允许

但是可以初始化:const int nochange = 12;    //这是允许的

(2)、在指针和参量中使用const:

1     const float * pf;      //pf可以改变,但pf指向的值不可改变2     float * const pf;      //pf只能指向一个唯一的地址,不可改变,但pf指向的值可以改变3     const float * const pf;    //pf与pf指向的值都不可改变  

    结论: 当 * 在const之前,意思是不变的是pf,也就是一个常量指针,表示pf不可变,pf指向的值可变;

        当 * 在const之后,意思的是不变的是(*pf),所以pf可变,但pf所指向的值不可变。

(3)、对全局变量使用const:有两种情况

  a、在一个文件中定义声明,在另一个文件中进行引用声明(关键词extern):

1 //file1.c   定义一个全局常量2 const double PI = 3.143 const char * MONTHS[12] =4         {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};5 6 // file2.c 使用在其他文件中定义的全局常量7 extern const double PI;8 extern const * MONTHS[];

  b、将常量放在一个include文件中,这是必须使用静态外部存储类:

1 //constant.h   定义一些全局常量 2 static const double PI = 3.14 3 static const char * MONTHS[12] = 4         {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; 5 6 // file1.c 使用在其他文件中定义的全局常量 7 #include "constant.h" 8 9 // file2.c 使用在其他文件中定义的全局常量10 #include "constant.h"

    注:使用头文件的好处就是不必惦记着在一个文件中进行定义声明,在下一个文件中进行引用声明:全部文件都包含在一个头文件中;缺点就是在于复制数据,若数据很大,这就回造成问题了

2、类型限定词volatile:

  限定词volatile告诉编译器,该变量除了可被程序改变外,还可以被其他代理改变。

  一个值可以同时被const和volatile修饰,表示不能由程序改变,但是可以被其他代理改变:

    例如:volatile const int loc;    //volatile和const 的顺序无所谓

3、类型限定词restrict:

  关键字restrict允许编译器优化某几种代码以增加计算支持;它只可用于指针,并表明指针是访问一个数据对象的唯一且初始的方式。

  例如:int * restrict restar = (int *) malloc(10 * sizeof(int));  //指针restar是访问malloc()分配内存的唯一且初始化的方式

  例如:

1 int arr[10];int * par = arr;2 for (n = 0; n < 10; n++){3     restar[n]+=5;4     arr[n]+=35     restar[n]+=3;6     par[n]*=2; arr[n]+=5;7 }

 

  其中restar是访问它所指数据块的唯一初始方式,所以可以用 restar[n]+=8代替。但是arr就不能,因为它不能确定有没有其他的指针改变了该处的值。

 

转载于:https://www.cnblogs.com/TsnTse/p/9074968.html

你可能感兴趣的文章
Using JRuby with Maven
查看>>
一名女程序员对iOS的想法
查看>>
Spring Websocket实现文本、图片、声音、文件下载及推送、接收及显示(集群模式)...
查看>>
最严新规发布 网络短视频平台该如何降低违规风险? ...
查看>>
云服务器ECS出现速度变慢 以及突然断开怎么办?
查看>>
208亿背后的“秘密”
查看>>
Android系统自带样式(android:theme)解析
查看>>
全志A33开发板Linux内核定时器编程
查看>>
全栈必备 敏捷估点
查看>>
作为一名合格的JAVA架构师需要点亮哪些技能树?
查看>>
Kubernetes 在知乎上的应用
查看>>
【死磕 Spring】----- IOC 之解析 bean 标签:BeanDefinition
查看>>
PHP浮点数的精确计算BCMath
查看>>
基于Token认证的WebSocket连接
查看>>
【Solidity】2.合约的结构体 - 深入理解Solidity
查看>>
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>
小程序开发总结
查看>>
管理ORACLE实例
查看>>