C++指针与const
来源:互联网 发布:网络信息安全 编辑:程序博客网 时间:2024/06/05 04:09
(本文参考C++ Primer Plus)
1. const指针指向const变量(合法)
const int var = 1;const int* p1 = &var;
程序合法,而且都不能通过var和*p1改变地址上或者变量的值。
2. const指针指向非const变量(合法)
int var = 1; const int* p1 = &var;
程序合法,不能通过地址操作修改变量的值(*p1++, 非法), 但是可以通过直接修改变量var的值(var++, 合法)。虽然不能修改p1指向的值,但是可以修改pt的值,即可以将一个新地址赋给p1。
3. 非const指针指向const变量(非法)
const int var = 1;int* p1 = &var;
程序非法!!!如果一个数组是由const数据组成的,则禁止将常量数组的地址赋给非常量指针,也就意味着不能将数组名作为参数传递给使用非常量形参的函数。
4. 非const指针指向非const变量(合法)
int var = 1;int* p1 = 1;
普通的地址与变量操作,自然是合法的。指针与变量均可进行赋值操作。
5. 指针之间的指向关系
const int **p2;int *p1;const int n = 1;pp2 = &p1; // 合法,const二级指针指向非const指针*pp2 = &n; // 合法,但是p1 = &n非法(第三点)*p1 = 2; // 合法,n的值被修改
上述代码将非const地址(&p1)赋给了const指针(p2),因此可以通过p1来修改const数据。当只有一层“间接”关系时(p2和n是一层间接关系,p1和n是直接关系),可以将非const地址或者指针赋给const指针,而且可以使用p1来修改const数据。
总之,const指针可以指向“非指针类型”的const数据、非const数据、const数据的地址或者非const数据的地址;但是非const指针只可以指向非const数据和非const数据的地址。
另外,要注意const int* p 与 int const* p的区别,
const int* p:*p是const,不可以修改p指向地址的值,但是可以修改指向的地址;
int const* p:p是const,不可以修改指向的地址,但是可以修改指向地址的值。
1 0
- C++:const与指针
- C语言const与指针
- const与const指针
- C语言中的const与指针
- c的指针与复杂变量---const
- C/C++指针与const、数组、函数
- C经典 const与指针解析
- c++const指针与函数调用
- C指针与const的那些事
- C语言之const与指针
- 指针:const与指针
- C语言中const与指针的指针
- C/C++中的const--常量指针与指针常量
- c++const指针
- C中指针const
- C++:const和指针
- 【C和指针】const指针
- C语言中的const与指针的同址异值现象(指针究竟能不能修改const问题)
- tp5的URL问题
- Android MultiDex问题
- android studio项目运行失败 finished with non-zero exit value 1 的解决办法
- 从数据库取数据时,带有回车/换行符替换方法
- 快速排序
- C++指针与const
- 利用MyBatis进行不同条件的like模糊查询
- poj 1258(最小生成树)
- http详解(2)
- iOS ***各种网络编程面试总结****
- javaMail发送邮件(工具类开发)
- python redis实现bloomfilter
- poj 3128 Leonardo's Notebook (置换)
- meno