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;
答案:(鼠标选中查看)
加载全部内容