为什么80%的码农都做不了架构师?>>>   

当const和指针一起使用的时候,会出现很多复杂的情况,这些复杂的情况大概可以归纳为3种情况:

(1),指向常量的指针。

(2),常指针。

(3),指向常量的常指针。

现在,我来为大家分析这三种使用情况以及用法。

(1),指向常量的指针是是说一个指向常量的指针变量,例如:

const char* name = "chen";      //声明指向常量的指针。

这个语句的含义为:声明一个名字为name的指针变量,它指向一个常量(这个常量为字符型),初始化name为指向字符串“chen”。

由于使用的const,不允许改变该指针所指向的地址中的常量,因此以下语句是错误的:

name[3] = 'a';          //报错,指针所指向的地址中的值是常量值,不能改变。

但是,由于name是一个指向常量的一般指针变量,不是常指针,因此可以改变name所指向的地址。以下操作是正确的:

name = "abcd";                //合法,可以改变指针所指向的地址。

该语句付给了name另外一个字符串的首地址,改变了name的值。

(2),常指针是把指针所指的地址(而不是它所指向的对象)声明为常量,例如:

char* const name = "chen";             //常指针

这个语句的含义是:声明一个名字为name的指针变量,该指针是指向字符型数据的常指针,用"chen"的地址初始化该常指针。

创建一个常指针,就是创建一个不能移动的固定指针,即不能改变它所指向的地址,但是可以改变所指向的地址中的数据。例如:

name[2] = 'a';           //合法,改变所指向的地址中的值

name = “abcd”;    //编译不通过,name所指向的地址是不能够被改变的。

第一个语句是要改变指针所指的地址中的数据,这是合法的,而第二个语句则是要改变该常指针的地址,显然是不合法的。

(3),指向常量的常指针,是指这个指针本身不能被改变,它所指向的地址中的数据也是不能被改变的。要声明这个指向常量的常指针,二者在声明的时候都要用const,例如:

const char* const name = "chen";       //指向常量的常指针。

这个语句的含义是:声明一个名字为name的指针变量,它是一个指向字符型常量的常指针,用”chen“的地址初始化该指针。因此,对于以下两个表达式都是错误的:

name[2] = 'a';            //出错,指针所指向的地址中存的是常量,不能更改

name = "zhang";     //出错,该指针所指向的地址不能被更改。

补充说明:

(1),如果用const定义的是一个整型常量,关键字int可以被省略。所以以下的两行定义是完全等价的:

const int MAXSIZE = 10;

const MAXSIZE = 10;           //省略了关键字int

(2),常量一旦被建立,在程序的任何地方都不能更改。

(3),与#define定义的常量有所不同,const定义的常量可以有自己的数据类型,这样C++可以进行更加严格的类型检查,具有良好的编译时的检测性。

(4),函数的形参也可以用const说明,用于保护形式参数在该函数内部不会被改变,大多数C++编译器能对具有const参数的函数进行更好的代码优化。例如,希望通过函数i_MAX求出整形数组a[200]中的最大值,函数原型是:

int i_MAX(const int* ptr);

调用时的格式可以是:

i_MAX(a);

这样做的目的是为了确保原数组中的值不会被破坏,即在函数中,只允许对该数组进行读,不允许进行写。

-------------------------------------------------------------------------------------------                                       以上内容由阮坤原创,若需要转载,请注明出处。

转载于:https://my.oschina.net/qkmc/blog/654856

C++中常量指针,指针常量(const 和*)的使用方法和理解方法相关推荐

  1. C++:const的使用(普通常量、指针、引用)

    const声明的是常量,常量基本上只能读不能写.其实x也是能写的,但他只是在x初始化的时候完成了写操作. int main() {const int x=4;//x是const int型.在初始化时写 ...

  2. 简单介绍C++中常量与指针

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的,所以这篇文章主要给大家介绍了关于C++中常量与指针的相关资料,需要的 ...

  3. const指针和指向常量的指针

    先看下面六种写法: 1. const int p;2. const int *p;3. int const* p;4. int * const p;5. const int * const p;6. ...

  4. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  5. c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数

    十一.指针 (1)指针的定义和使用 指针的作用:可以通过指针间接访问内存. 参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&a ...

  6. const修饰是指针和常量

    1. const修饰指针--常量指针 int a=10: int b=10: int *p=&a;const int* p=&a; 常量指针 特点:指针的指向可以修改,但是指针指向的值 ...

  7. char * const p; //常量指针,p的值不可以修改  char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p

    char * const p; //常量指针,p的值不可以修改 char const * p://指向常量的指针,指向的常量值不可以改 const char *p: //和char const *p

  8. 辨析 const指针 和 指向常量的指针

    辨析以下几种指针p的定义. int tmp = 5;int *p = &tmp; const int *p = &tmp; int const* p = &tmp; int * ...

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

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

最新文章

  1. AS5 安装 JAVA 1.6.0 用于 TOTOplayer的启动
  2. 轻松玩转jquery。
  3. MFC应用程序框架入门
  4. Weblogic调试延长时间
  5. BigDecimal你遇见过哪些坑?
  6. python资产管理系统_Python [5] IT资产管理(上)
  7. 深度|数据库产品如何选型?掌握这一招就够了
  8. 动真格!阿里云刚说缺 5000 程序员,今天就来抢人!
  9. 神经网络模型参数的压缩
  10. 图像中值滤波器python实现
  11. 3DMAX解决Vray渲染材质溢色问题的三种方法
  12. (外接屏幕亮度控制软件)AOC显示器、Dell显示器
  13. 什么是MergedBeanDefinition?
  14. lan和adsl是什么信号_光纤、以太网、ADSL上网有什么区别?
  15. windows7下安装sharex视频截图报错,需要下载ffmpeg——Unknown input or output format: gdigrab
  16. 安装Matlab时用mathwork账户登陆时显示连接错误
  17. 如何鉴别交换机的优劣好坏?您可以从这十方面去评判!
  18. 2022联想小新pro14和联想小新pro16 区别 哪个好
  19. 巨型计算机卡通,动漫史上十大超巨型机体
  20. 青海行--(7月28日)凯旋归程

热门文章

  1. K2 Blackpearl中从数据库直接删除流程实例之K2Server表
  2. Lighttpd 搭建 Web 服务器
  3. (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
  4. 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
  5. 利用ettercap进行简单的基于数据库的ARP毒化攻击
  6. Codeforces Round #529 (Div. 3) 题解
  7. Python 监控主机程序,异常后发送邮件(我的第一只Python程序)
  8. 8-2 主从复制高可用
  9. C#是一种垂死的语言吗?
  10. ai音响怎么连接网络_网络适配器未连接怎么办