const *和* const讨论

const *和* const讨论

        使用一个指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const “预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指针对象声明为常量,我们必须使用声明运算符* const,而不能只用简单的const。例如:

void fun_1(char* p)
{
	char s[] = "Gorm";
	const char* pc = s;			//指向常量
	pc[3] = 'g';				//错误:pc是指向常量的
	pc = p;						//OK

	char *const cp = s;			//常量指针
	cp[3] = 'a';				//OK
	cp = p;						//错误:cp是常量指针

	const char *const cpc = s;	//到const的const指针
	cpc[3] = 'a';				//错误:cpc指向常量
	cpc = p;					//错误:cpc本身是常量
}

定义常量指针的声明运算符是* const。并没有const *声明符,所以出现在*之前的const是作为基础类的一部分。例如,

char * const cp;	//到char的const指针
char const* pc;		//到const char的指针
const char* pc2;	//到const char的指针

有人发现从右向左读这种定义很有帮助。例如,“cp是一个const指针到char”,以及“pc2是一个指针到const char”。

        一个某时通过指针访问当做敞亮的对象,也完全可能在以其他方式访问时被作为变量。对于函数参数而言,这个情况就特别有用。通过将指针参数声明为const,就禁止了这个函数对被值参数的修改。例如,

char * strcpy(char* p,const char* q);//不能修改*q

你可以将一个变量的地址赋给一个到常量的指针,因为这样做不会造成任何xx。当然,不能将常量的地址赋给一个未加限制的指针,因为这样将会允许修改该对象的值了。例如:

void fun_4()
{
	int a = 1;
	const int c = 2;
	const int* p1 = &c;	//ok
	const int* p2 = &a;	//ok
	int* p3 = &c;		//错误:用const int* 对int* 进行初始化
	*p3 = 7;			//试图修改c的值
}

可以通过对const指针的显式类型转换,明确要求去掉这种限制。

这里相关论点摘自《C++程序设计语言(特别版)》,(美)Bjarne Stroustrup、贝尔实验室 裘宗燕 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值