C++学习日志 指针常量与常量指针

本文从初学者的角度探讨C/C++中的指针常量和常量指针。通过实例解析,指出常量指针(PointertoConstant)是指向常量的指针,而指针常量(ConstantPointer)则是指针本身不可变,但指向的变量可以改变。区分两者的关键在于const关键字的位置,靠近int则修饰变量,靠近指针则修饰指针本身。
摘要由CSDN通过智能技术生成

引言

在C/C++中,指针一直是编程语言的灵魂所在,指针的灵活性给编程带来了无限的可能性,但是也给初学者带来了噩梦。
本文以一个初学者的视角的看待指针常量和常量指针的区别,以及在完全无法理解的情况下,可以使用的一些技巧。

问题引出

指针p指向x
如上图所示,这里定义了一个指针p指向变量x。

int x = 5;
int* p = &x;

常量指针与指针常量

这里很容易理解,x和p是变量,其中p是指针,指向x,p中存储了内存区域中x所在的地址。
那么如果x是一个常量呢?也就是:

const int x = 5;

那么作为指向一个常量的指针,p的类型也不能再为int*型了,因此我们要对p的声明和初始化做一些更改:

const int* p = &x;

如此我们就得到了本文所讲的常量指针(Pointer to Constant)。个人觉得两者的中文翻译很容易让人混淆,反而不如英文更加清晰:Pointer to constant,指向常量的指针,简称常量指针

那么这一对金童玉女的另一只——指针常量(Constant Pointer)则显得有些别扭。

int x = 5;
int* const p = &x;

该如何理解呢?
先说结论p是一个常量,它无法被改变,同时他是一个指向x的指针,这里p存储的是x的地址,所以说这个地址无法改变,也就是这个指针只能指向x。

区分

不得不说,两者的区分实在太过困难,即使你已经懂了,过了一会可能又会忘记,或者混淆。那么我们需要一个能够准确、有效、快速区分他们夫妻俩的办法。

const int* p = &x;
int* const p = &x;

谁靠前谁先读: 比如
const int * p 就读做 常量指针
int * const p就读做指针常量
const靠近谁 谁就不能被修改:

const int* p 中const靠近int,因此修饰的是int型数据x,x不能被改变;
int* const p中,const靠近p,因此修饰的是p,p不能被改变。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值