指针与 const --- 指针常量与常量指针
注:该文主要来源于 网易公开课之《C++ 程序设计入门(上)》课件。
在 C 语言标准中,const 修饰的变量称之为 只读变量,
在 C++ 语言标准中,const 修饰的变量称之为 常量,
例:
const int ARRAY_LEN = 100;
int array[ARRAY_LEN]; //该语句在C++ 编译器中是可行的,但是在C编译器中是会报错的
以上是 const 在 C 和 C++ 中的差别,下边主要介绍 const 与指针:
1. 指针的两个属性
a. 指针变量本身
b. 指针变量所指向的内容
2. 常量指针和指针常量
a. 常量指针(常指针):指针(p)所指向的内容不能通过指针的间接引用(*p)来改变
例:
const int i = 0;
const int* p1 = &i; //指针 p1 的类型是 const int*
*p1 = 10; //error
b. 指针常量:指针本身的内容是一个常量,不可以改变
例:
int a = 1;
int b = 2;
int* const p = &a; //常量 p2 的类型是 int*
*p2 = 10; //ok, a = 10
p = &b; //error
注:数组名是数组首地址的别名,可以说 数组名就是一个指针常量,所以 :
int a[] = {1, 2, 3, 4};
a = a + 1; //error
3. 变量、常量和常量指针
a.
int i = 10;
int const *pi = &i;
*pi = 11; //error
i = 11; //ok
上述语句只是说明 pi 指向的地址中所存的内容不能通过 *pi 的方式被改变;
b.
const int ci = 10;
const int* pci = &ci;
*pci = 11; //error
ci = 11; //error
上述语句说明 ci 是一个常量,存放在常量区,不能被改变,pci 指向的地址中所存的内容不能通过 *pci 的方式被改变;
c.
const int ci = 10;
int* pci = &ci; //error
上述语句说明 ci 是一个常量,存放在常量区,不能被改变,也不能通过 *pci 的方式被改变,所以指向 ci 的指针必须是常量指针。
总结:
const int* p; //语句1
int const *p; //语句2
int* const p; //语句3
在前先读,在前不变
① *(指针) 和 const(常量)谁在前先读谁;
② * 代表被指的数据,名字代表指针地址;
③ const 在谁的前面谁就不能被改变。
④ 语句1 和语句2 等价
指针与 const --- 指针常量与常量指针的更多相关文章
- C++ const 常量和常指针
常量,该指针所指向的值为只读 ; const int * p = &a; 常指针,该指针的值为只读,不可再指向其他地址 const * const p = &a; 常值,常指针 con ...
- Const用法总结(快速区分指针常量与常量指针)
想当初面试时,面试官问我熟悉C++么?熟悉的话说一下const的用法,然后我就开始凌乱了~ 其实const的用处还真不少,好好捋顺一下会有很大的帮助. 有时候我们希望定义一种常量,它的值不能被修改,这 ...
- C++之常指针,指针常量,函数指针,const用法总结
1.const char *p,char const *p,char * const p 对于C++而言,没有const * 修饰符,所以,const只可以修饰类型或者变量名.因而const char ...
- C和指针 第三章 指针常量与常量指针
c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr in ...
- c++ 指针常量,常量指针
当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...
- C++中指针常量和常量指针的区别
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...
- CII-2.4指针常量和常量指针
#define T Stack_T typedef struct T *T; struct T { int count; struct elem { void *x; struct elem *lin ...
- 【转】C++易混知识点1: 指针常量和常量指针的区别,附有详细案例解释
熟悉C++也已经有一些年头了,今天突然翻出当年浏览的书籍,对一些概念居然生疏了,指针常量和常量指针由于 指针 这一特殊的对象而变得难以区别.因此,在思考再三之后,决定写下该篇总结,加强对他们的区别: ...
- C++ 指针常量和常量指针
1.指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改. 2.常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改.
随机推荐
- 学习鸟哥的Linux私房菜笔记(4)——文件
一.检查文件 用ls -l以长模式查看文件的详细信息,包含当前目录的硬盘使用空间.文件类型.文件权限.硬连接数.文件拥有者.文件所属组.文件大小.更改时间.文件名称. 用file检查文件类型 由于li ...
- 笔记-Windows10家庭中文版系统下使用Docker
1.docker是使用Linux内核的,在windows系统下需要使用虚拟机来运行docker. 2.Windows版的docker安装要求,(1)64为操作系统,win7或者更高,(2)支持&quo ...
- 【rlz000】字串找数
Time Limit: 3 second Memory Limit: 2 MB 问题描述 输入一个字符串,内有数字和非数字字符.如A123X456Y7A,302ATB567BC,统计共有多少个整数, ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement
原文:利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUw ...
- 一个2013届毕业生(踏上IT行业)的迷茫(5)
很快就到了该找工作的时间了,听说这一年是历史上找工作的人对多的一年,我也不知道是怎么统计的,可信不可信.跑了大概快一个月了,终于有offer了,就这样在这里实习了3个月,一直工作到现在. 回忆了整个学 ...
- git与svn的不同
假设你在读这篇文章,说明你跟大多数开发人员一样对GIT感兴趣,假设你还没有机会来试一试GIT,我想如今你就要了解它了. GIT不不过个版本号控制系统,它也是个内容管理系统(CMS),工作管理系统等.假 ...
- 修改MessageBox的标题的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 1.用Win API的::MessageBox或CWnd::MessageBox代替AfxMessageBox. 2. ...
- 如何移除解决方案中的TFS版本控制
1.清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 2.修改项目的解决方案文件:*.sln (1).先 ...
- Javascript 基准测试
http://bubkoo.com/2014/02/18/bulletproof-javascript-benchmarks/
- Linux学习(1)vi编辑器的常用命令
今天对Linux中的vi编辑器进行了学习,对其中的常用命令进行总结: 数字 0 或^:光标移到行首 $ :光标移到行尾 H :光标移到屏幕的首行 L ...