c++ 常量指针 const*const
2015-07-10 17:23
393 查看
1.什么是常量指针
我们可以使用const 来修饰指针,在用const 修饰指针时,我们可以指出,指针自身,指针所指的内容,为常量 const。当const修饰指针时,如果关键字const出现在 星号* 左边 表示的是指针所指的内容为常量,如果关键字const 出现在星号* 右边 表示的是指针本身为常量。如果const出现在星号*两边 表示 指针本身 和指针所指的内容都为常量,不能被修改。为了更清楚地说明const是如何修饰指针的,请看以下代码
2.怎么使用常量指针?
因为常量定义式通常被放在头文件内(以便被不同的源码引入)
,因此有必要将指针 (而不是指针所指的内容)声明为const
如 int const b = &a;如果在头文件内定义一个常量(不变的量)const必须写两次, 如: const int const b = &a ;
我们可以使用const 来修饰指针,在用const 修饰指针时,我们可以指出,指针自身,指针所指的内容,为常量 const。当const修饰指针时,如果关键字const出现在 星号* 左边 表示的是指针所指的内容为常量,如果关键字const 出现在星号* 右边 表示的是指针本身为常量。如果const出现在星号*两边 表示 指针本身 和指针所指的内容都为常量,不能被修改。为了更清楚地说明const是如何修饰指针的,请看以下代码
#include<iostream> using namespace std; //测试 const关键字修饰指针 int main(void){ int a = 3;//定义了一个整形变量a 并且用3来初始化变量a 这里a的 //值为3 int b = 4;//定义了一个整形变量b ,用4来初始化变量 b 这里b //的值为4 int *pa = &a;//定义了一个指向整形的指针变量pa ,pa指向a 的 //地址 此时pa的值为 a的地址&a ,*pa 的值为3 //此时因为星号*前面和后面都没有const修饰,所以 //不管是指针变量pa还是指针pa所指物都可以发生改 //变 //指针本身发生改变 pa = &b;//此时指针变量pa的指向发生了改变,把变量b的地址赋值给 //了pa 是合法的,此时pa 的值为b的地址&b,*pa 的值为 //变量b的值4 //指针所指的内容发生改变 *pa = a;//此时指针变量pa的指向没有发生改变,还是指向上一指令b //的地址,但是指针所指的内容已经由变量b 变为变量a 此 //时*pa的值为变量a的值3 //const 修饰指针本身 指针本身不能发生改变,指针所指的内容可以改变 int* const pc = &a;//定义了一个指向整形变量的常指针pc,并且 //把变量a的地址&a 赋给 pc 此时 pc 指 //向变量a的地址&a,*pc 的值为变量a 等 //于3 //pc = &b; //编译器报错,表达式必须是可修改的左值,因为 //pc 为常指针,指针本身不能发生改变 *pc = b; //可以通过,指针pc 所指的内容是可变的,此时把 //变量b 赋给 pc所指的内容,*pc 此时由a的值3 //变为b的值4 //const 修饰指针所指的内容,把const放在* 左边,此时指针本身pd可以发生改变,指针所指物*pd不能发生改变 const int * pd = &a;//定义另一个指针变量pd ,pd所指的内容*pd为常量,并且把变量a的地址&a 赋给pd ,此时指针变量pd 的值为变量a的地址&a //*pd = b;//编译器报错 “不能给常量赋值”此时 指针变量pd所指的内容为常量,不能发生改变 //const 既修饰指针本身 又修饰指针所指的内容 const int* const pe = &a;//此时定义了一个指向常量型的指针常量 pe ,并且把变量a的地址赋&a 赋值给pe,此时无论指针pe 还是指针pe所指的内容都不能发生改变 //pe = &b; //编译器报错 “表达式必须为可修改的左值” // *pe = b;// 编译器报错 “表达式必须为可修改的左值” cout << *pa <<endl; return 0; }
2.怎么使用常量指针?
因为常量定义式通常被放在头文件内(以便被不同的源码引入)
,因此有必要将指针 (而不是指针所指的内容)声明为const
如 int const b = &a;如果在头文件内定义一个常量(不变的量)const必须写两次, 如: const int const b = &a ;
相关文章推荐
- C++重载运算符
- C语言中的强符号与弱符号
- C++内存管理
- C++学习笔记27,虚函数作品
- c++primer要点-标准库
- C++中重载与重写函数区别及虚函数
- C++ STL中的vector的内存分配与释放
- C/C++浮点数在内存中的存储方式
- C++在struct与class差异
- 栈的C语言 数组实现
- C++学习 文件读写详解(ofstream,ifstream,fstream)
- c语言实现二叉树层次遍历(借助队列实现)
- C/C++校招笔试面试经典题目总结三
- C语言中strcat的实现方法
- leetcode 日经贴,Cpp code -Palindrome Linked List
- C++对const的用法笔记
- C++的流插入运算符“<<”和流提取运算符“>>”的重载
- c++的内存分配
- C++工程管理中autoconf使用
- VC++ 把窗口带到最前