没有合适的资源?快使用搜索试试~ 我知道了~
C语言中的类型修饰符说明,简单的资料,应该有点用
资源推荐
资源详情
资源评论
C 语言中的类型修饰符
在一般的 C 教科书中,可以见到 6 种类型修饰符,分别是: auto, const, register, static, volatile, extern.
局部变量除非显式指明为 static, 否则默认为 auto,所以一般不会在代码中使用类型修饰符 auto.
在后编译器时代,优化器可以合理的分配寄存器,所以一般不会在代码中使用类型修饰符 register.
extern 只用于声明全局变量,用法单一。
本节将主要介绍 const, static 和 volatile.
1. const
首先需要注意的是,const 修饰的是在它前面的类型,如果它前面没有类型,那它修饰的是紧跟着它的
那个类型。
例如:
(a)const int i = 0; 和 (b)int const i = 0; 是完全一样的。
在(a)中,const 前面没有类型,它就修饰它后面的那个 int 类型。在(b)中,const 修饰它前面的 int 类型,
两者没有任何区别。
再看另一个稍复杂一点的例子,下面两条语句却不相同:
(c)const int *pi = 0;
/* 相当于 int const *pi = 0; pi 是一个指向 const int 的指针,复引用此运算符为得到一个 const int 的类型,
该类型不能作为左值,在该语句后使用类似于*pi = 1 的操作将导致编译错误。但该变量本身并不具备 const
属性,可以使用 pi = &i 的操作。可用于访问只读存储器。*/
(d)int* const pi = 0;
/* pi 是一个指向 int 类型的 const 指针,复引用此运算符为得到一个 int 类型,该类型可以作为左值,在该
语句可以使用类似于*pi = 1 的操作,但该变量本身具备 const 属性,使用 pi = &i 的操作将导致编译错误。
可用于访问固定位置的存储器。*/
再看一个更复杂的例子:
(e)const int* const pi = 0;
/* pi 和*pi 均不能作为左值。它只适合于读取某个固定位置的只读存储器 */
const 还有下列典型用法:
* 用于参数列表,通常修饰的是指针类型,表明该函数不会试图对传入的地址进行写操作。例如:
void *memcpy(void *, const void *, size_t);
* 用于返回值,通常是一个指向只读区域的指针。例如:
const datatype_t *get_fixed_item(int index);
* 给固定不变的数据(例如码表)加上只读属性,在某些情况下可以减小 ram 的开销。
2.static
static 用于全局变量声明和局部变量声明具有完全不同的语义,不得不说,这是 C 语言设计中的一个不
合理之处。当 static 用于修饰全局变量声明(或函数声明,可以认为函数声明就是声明一个指向代码段的指
针,该指针的值最后由链接时决定,从这个意义上说,函数声明也是一种全局变量声明),它表示该变量具
有文件作用域,只能被该源文件的代码引用,不能被其他源文件中的代码访问。在编译时引起的实际变化
是被 static 修饰的变量不会被写入目标文件的输出节,在链接时解析其他模块中的未定义符号时不会被引
用到。它的反义词是 extern。
资源评论
Apollo5520
- 粉丝: 2
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功