C/C++里的指针与常量:指向常量的指针 vs. 指向变量的常量型指针

const int i = 0;
const int* const p = &i;

上述代码所定义的指针是常量型的,同时,该指针指向一个常量型整数。

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

如第3章所述,常量(constant)是只读的对象。指针作为对象,既可以是变量,也可以是常量。

const int a = 10;
   //int* p1 = &a;     //错误:a的地址为const int*,而p1是int*

第2行代码错误,a的类型为const int,&a的类型为const int*,而p1的类型为int*。如果将a的地址赋值给p1,则意味着通过*p1可以修改对象a,a的常量特性被破坏。如果试图把一个指向常量对象的指针(&a)赋值给一个指向非常量对象的指针(p1),C++编译器会拒绝(C编译器不会)。

int c = 10, d = 11;
const int* const p3 = &c;
//*p3 = 101;        //错误:p3指向const int,不可修改*p3
//p3 = &d;          //错误:p3自身是常量,不可修改其值改变其指向

第2行代码里出现了两个const,对于指针p3而言,这两个const具有不同的意义:前者用于修饰p3指向的对象,意即p3所指向的对象为常量;后者用于修饰p3,意即p3是常量,除初始化赋值外,不可以修改p3的值改变其指向。如下图所示。
在这里插入图片描述
所以,第3行代码错误,*p3,即p3所指向的对象不可以修改;第4行也错误,不可以修改常量p3。

为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

简洁的C及C++
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
Python编程基础及应用
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

Python编程基础及应用

Python编程基础及应用实验教程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值