1.常量指针

const int  *PtrConst 或者是 int const  *PtrConst (即const 在*的左边)
指向常量的指针,这里所说的“常量”其实在解引用时起到所谓常量的作用,并非是指向的变量就是常量,指向的变量既可以是非常量也可以是常量。总体意思是不能修改指向某变量的值。

让指针指向一个常量,可以防止使用指针来修改所指向的值。

1.常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;

 int a = 1;const int *p = &a;std::cout << *p << a << std::endl;a = 2;//可以std::cout<< *p << a << std::endl;结果*p = 2;a = 2;如果是  *p = 3; //报错

因为不能通过这个指针来修改,所以可以用常量指针当函数的参数使用。
2.指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;

 int a = 1;const int *p = &a;std::cout << "p= "<< *p <<";" << "a=" << a << std::endl;int b = 2;p = &b;std::cout<<"p= "<<  *p << ";" <<"b=" <<  b<< std::endl;p= 1;a=1
p= 2;b=2

延伸:

1.可以将const 变量的地址赋给指向const 的指针(即常量指针)。

如 const  int  a = 1;   const int * p = &a;//可以

2.不可以将const 的地址赋给常规指针。

如 const  int  a = 1;    int * p = &a;//不可以

除非使用强制类型转换,const_cast

const int a = 1;
    int *p = const_cast<int*>(&a)//可以

2.指针常量:

int  const  *PtrConst;
本质是一个常量,而用指针修饰它。指针常量的值是指针。

1.必须初始化,只能指向一个变量,绝不可再改变指向另一个变量

//int *const ConstPtr;//报错,error C2734: “ConstPtr”: 如果不是外部的,则必须初始化常量对象

int a=1;    int *const ConstPtr=&a; //可以
    int b = 2;   ConstPtr=&b;   //不可以

2.指向的地址所对应的内容可以变化。

int a=1;    int *const ConstPtr=&a;    ConstPtr = 3; //可以

如果出现在星号两边,表示被指物和指针都是常量。

c++之指针常量和常量指针相关推荐

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  2. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

  3. 常量指针与指向常量的指针

    这两个概念经常很容易混淆,下面简单分析一下 1.常量指针: int * const p   : const p 就是一个常量,然后再看*,可以看出是一个常量类型的指针,即int类型的常量指针.不能修改 ...

  4. [C++] 指向常量的指针 VS 指针类型的常量

    指向常量的指针 VS 指针类型的常量 const 修饰指针时的位置不同,作用也不相同. 1. 指向常量的指针 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象. 例: i ...

  5. [C++基础]018_常量指针和指向常量的指针

    先来看一下什么是常量指针,什么是指向常量的指针吧! 1. 常量指针定义 1 int * const ptr = new int(); 2. 指向常量的指针 1 const int* ptr; 上面已经 ...

  6. 【错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 中的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )

    文章目录 一.报错记录 二.修改方案 一.报错记录 执行下面的代码 , 报错如下 : 执行的错误代码 : #include <stdio.h> #include <stdlib.h& ...

  7. 【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一.字符串 一级指针 内存模型 1.指定大小字符数组 2.未指定大小字符数组 3.指向常量字符串的指针 4.指向堆内存的指针 一.字符串 一级指针 内存模型 #include <std ...

  8. C++ 指向常量的指针与指针类型的常量

    (1)声明指向常量的指针时,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象. #include<iostream>using namespace std;int m ...

  9. c++ 指针常量,常量指针

    当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...

  10. 指针常量和常量指针简单区分理解

    哪个放在后面哪个是主体,更重要一些 指针常量(指针本身就是常量) 主体为常量,const放 * 后面,形如:int * const x. 因为指针本身就是常量,所以指向的地址不可改变,但地址里的内容可 ...

最新文章

  1. 洛阳综合保税区正式获国务院批复同意设立
  2. 简述http 和 https区别
  3. html盒子阴影只设置左右,只在容器一边或两边显示盒子阴影
  4. Asia Yokohama Regional Contest 2018 K题 - Sixth Sense(思维加贪心加二分)
  5. gprMax 正演模拟中Ex、Ey、Ez三个分量之间的关系分析
  6. Git 历史记录内容对比
  7. [J2ME QA]untrusted domain is not configured问题回应
  8. Oracle 基本查询:dual、distinct、null、between and、in、like、order by、group by、dual、as
  9. Layui表格刷新(重载)
  10. 苹果怎么分享无线密码_无线路由器密码怎么破解 无线路由器密码破解方法【介绍】...
  11. 中国未来5年最“吃香”的4大行业,市场需求大,堪比铁饭碗!
  12. Python概念-Item系列(林海峰教的)
  13. java根据逗号拆分_Excel拆分单元格文本,一列变多列,你学会了吗?
  14. 在虚拟机Linux上写c语言代码
  15. 男士必须收藏:男士健身方案
  16. python用glob读取文件夹
  17. 了解如何通过 UltraEdit丨UEStudio 中的窗口停靠系统显示、控制和配置文件选项卡
  18. ms08-067漏洞 远程溢出入侵测试
  19. Ubuntu下配置WPS字体
  20. 无法连接到此网络 win10

热门文章

  1. Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
  2. 索引法则--尽量使用覆盖索引
  3. Js+fromdata
  4. 跟着百度学PHP[3]-PHP中结构嵌套之循环结构与条件结构嵌套
  5. 浅谈Delphi过程与函数03 - 零基础入门学习Delphi22
  6. 搭建Android版的React Native项目
  7. vue + vue-router +axios + element UI + PHP + CodeIgniter + Mysql 项目管理系统
  8. ssh互相免密登录_linux服务器之间实现ssh免密码登录的方法
  9. Matlab简单教程:矩阵
  10. 全网首发:字体引擎中字符图像的插槽