Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14616
  • 博文数量: 4
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-01 10:48
文章分类

全部博文(4)

文章存档

2009年(4)

我的朋友
最近访客

分类: C/C++

2009-08-09 15:26:03

在c/c++语言中,const用于声明一个常量,比如下面的声明:

const int a = 10
这个语句定义了一个常量a,值为10,由于加上了const修饰,因此 a 在它的生命周期里无法别修改,如果修改,在编译的时候就会报错。

上面的语句很好理解,但是是否能够正确的理解下面的语句呢?

第1个:

char * pstr = "hello";
第2个:

const char * pstr = "hello";
第3个:

char* const pstr = "hello";
第4个:

const char* const pstr = "hello";
解答:

第1个:pstr是一个指向个常量字符串的指针。在c/c++中,"hello"这个字符串的字面值是一个“const char”类型,即常量,不能修改。

下面的代码编译器就会报错:

char * pstr = "hello";
*pstr =  “something"
第2个:与第1个一样,只是在指针设声明前加上了const,更能清楚地表达指针指向的内容不可修改,主意:但该指针所执行的对象可以更改! 如:

错误:

const char * pstr = "hello";
*pstr = "some";
正确:pstr和pstrB都指向了“some”这个常量

const char * pstr = "hello";
const char * pstrB = "some";
pstr = pstrB;
第3个:什么了一个常量指针,意思是该指针所指向的对象不能改变,但对象的内容可以改变! 如:

错误:

char a[] = "hello";
char * const pstr = a;
char b[] = "some";
pstr = b;
正确:pstr和pstrB都指向了“some”这个常量

char a[] = "hello";
char * const pstr = a;
a[0] = 'c'
此时pstr指向的对象:字符数组a[]的内容由hello变成cello
第4个:申明了一个指向一个常量字符串的常量指针。意思是指针所指向的对象不能改变,对象的内容也不能改变!

错误:

const char a[] = "hello";
const char * const pstr = a;
a[0] = 'c';  //错误
pstr = b;      //错误
总结:

指向常量对象的指针:指向的对象的内容不可改变
指向对象的常量指针:指针指向的对象(即指针保持的地址)不可改变,对象的内容可以改变
指向常量对象的常量指针:指针指向的对象和对象的内容都不可以改变

补充:
const也可以用在类定义中的方法的限定,如下面的类定义:
class Persion
{
public:
int age;
char* name;
...
void sya() const; 
....
}
表示在该函数内部不能修改调用该方法的Persion对象的属性(如age),下面的实现将会报错:

void Persion::say() const
{
this->age = 10;  //错误,不能修改类的属性值
cout<<"........\n";
}

当我们设计类的函数时,如果不需要改变类的属性值,最好加上const,避免设计中出现修改属性的代码,从而在编译阶段就可以找出错误地方。
阅读(672) | 评论(0) | 转发(0) |
0

上一篇:ARM S3C44B0X 之 看门狗定时器 篇

下一篇:没有了

给主人留下些什么吧!~~