亲宝软件园·资讯

展开

C++指针

我叫RT 人气:0

在C++中,const作用于指针时,可以看做是对指针权限的限制。这里我们先把指针的权限归为两种,分别为指向权限修改权限。(ps:以上是为了理解方便,实际并没有如此规定)

	int a = 10, b = 20;
	int* p = &a;
	p = &b;		// 改变指向的权限  ✔
	*p = 30;	// 修改内存的权限  ✔
	const int* cp = &a;	// 限制修改权限
	//*cp = 100;		// error:表达式必须是可修改的左值	修改 ✖
	cp = &b;			// ok.								指向 ✔
	int* const pa = &a;	// 限制指向权限
	*pa = 100;			// ok.								修改 ✔
	//pa = &b;			// error:表达式必须是可修改的左值  指向 ✖

指针的赋值一般遵守权限缩小式的赋值。例如,我有一本书,我有使用权限(我可以看,可以做笔记),借给你后你只有阅读权限(只能看,不能做笔记)。当然,如果我们关系好,我可以赋予你使用权(你拥有读写的权利)。同样的,指针的赋值也是如此。

	int a = 10;
	int* p = &a;	// int*  <==  int *
	int* q = p;				// int*  <== int*
	const int* cp = p;		// const int*  <==  int*	权限缩小,✔
	int* const pa = p;		// int*	 <== int*			注意:int* const pa;是“int*”类型
	//int* p1 = cp;	// error:int*  <== const int *     权限放大,✖
	int* p2 = pa;	// ok.    int*  <== int*

我们可以得出一级指针赋值的公式

int *       <==  int *		// int* 包含 int* 和 int* const类型
int const * <==  int *		// int const * <=等同=> const int *
// 以上公式反过来赋值就是错误的..

练习一:一级指针指向练习题

题目一:下列表达式语句赋值错误的是?

	int a = 10;
	const int* p = &a;
	int* q = p;		
	int a = 10;
	int* const p = &a;
	int* q = p;
	int a = 10;
	int* const p = &a;
	int* const q = p;
	int a = 10;
	int* const p = &a;
	const int* q = p;

答案:(鼠标选中查看)

加载全部内容

相关教程
猜你喜欢
用户评论