首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C语言之const用法整理(2)

C语言之const用法整理(2)

一、Const作用


如下表所示:

No.

作用

说明

参考代码

1

可以定义const常量

 

const int Max = 100;

2

便于进行类型检查

const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误

void f(const int i) { .........}

//对传入的参数进行类型检查,不匹配进行提示

3

可以保护被修饰的东西

防止意外的修改,增强程序的健壮性。

void f(const int i) { i=10;//error! }

//如果在函数体内修改了i,编译器就会报错

4

可以很方便地进行参数的调整和修改

同宏定义一样,可以做到不变则已,一变都变



5

为函数重载提供了一个参考



class A
{

......

void f(int i)
{......} //
一个函数

void f(int i) const {......} //
上一个函数的重载

......
};

6

可以节省空间,避免不必要的内存分配

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝

#define PI 3.14159
//
常量宏
const doulbe
Pi=3.14159;
//
此时并未将Pi放入ROM中

......
double i=Pi;
//
此时为Pi分配内存,以后不再分配!
double I=PI;
//
编译期间进行宏替换,分配内存
double j=Pi;
//
没有内存分配
double J=PI;
//
再进行宏替换,又一次分配内存!

7


提高了效率

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高







二、Const的使用

1定义常量
(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。


TYPE const ValueName = value;

const TYPE ValueName = value;


(2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.



extend const int ValueName = value;

2、指使用CONST
(1)指针本身是常量不可变

(char*) const pContent;

const (char*) pContent;

(2)指针所指向的内容是常量不可变

const (char) *pContent;

(char) const *pContent;

(3)两者都不可变

const char* const pContent;
(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

继承事业,薪火相传
返回列表