C++中常量指针,指针常量(const 和*)的使用方法和理解方法
为什么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 和*)的使用方法和理解方法相关推荐
- C++:const的使用(普通常量、指针、引用)
const声明的是常量,常量基本上只能读不能写.其实x也是能写的,但他只是在x初始化的时候完成了写操作. int main() {const int x=4;//x是const int型.在初始化时写 ...
- 简单介绍C++中常量与指针
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的,所以这篇文章主要给大家介绍了关于C++中常量与指针的相关资料,需要的 ...
- const指针和指向常量的指针
先看下面六种写法: 1. const int p;2. const int *p;3. int const* p;4. int * const p;5. const int * const p;6. ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数
十一.指针 (1)指针的定义和使用 指针的作用:可以通过指针间接访问内存. 参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&a ...
- const修饰是指针和常量
1. const修饰指针--常量指针 int a=10: int b=10: int *p=&a;const int* p=&a; 常量指针 特点:指针的指向可以修改,但是指针指向的值 ...
- 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
- 辨析 const指针 和 指向常量的指针
辨析以下几种指针p的定义. int tmp = 5;int *p = &tmp; const int *p = &tmp; int const* p = &tmp; int * ...
- 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释
1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...
最新文章
- AS5 安装 JAVA 1.6.0 用于 TOTOplayer的启动
- 轻松玩转jquery。
- MFC应用程序框架入门
- Weblogic调试延长时间
- BigDecimal你遇见过哪些坑?
- python资产管理系统_Python [5] IT资产管理(上)
- 深度|数据库产品如何选型?掌握这一招就够了
- 动真格!阿里云刚说缺 5000 程序员,今天就来抢人!
- 神经网络模型参数的压缩
- 图像中值滤波器python实现
- 3DMAX解决Vray渲染材质溢色问题的三种方法
- (外接屏幕亮度控制软件)AOC显示器、Dell显示器
- 什么是MergedBeanDefinition?
- lan和adsl是什么信号_光纤、以太网、ADSL上网有什么区别?
- windows7下安装sharex视频截图报错,需要下载ffmpeg——Unknown input or output format: gdigrab
- 安装Matlab时用mathwork账户登陆时显示连接错误
- 如何鉴别交换机的优劣好坏?您可以从这十方面去评判!
- 2022联想小新pro14和联想小新pro16 区别 哪个好
- 巨型计算机卡通,动漫史上十大超巨型机体
- 青海行--(7月28日)凯旋归程
热门文章
- K2 Blackpearl中从数据库直接删除流程实例之K2Server表
- Lighttpd 搭建 Web 服务器
- (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
- 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- 利用ettercap进行简单的基于数据库的ARP毒化攻击
- Codeforces Round #529 (Div. 3) 题解
- Python 监控主机程序,异常后发送邮件(我的第一只Python程序)
- 8-2 主从复制高可用
- C#是一种垂死的语言吗?
- ai音响怎么连接网络_网络适配器未连接怎么办