常指针和指向常量的指针

最近在学习引用,有一些学习心得,记录如下:

1:引用是变量的别名

int a;

int b&=a;

要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来,就将一直效忠于它。

2:引用的实质是指针

其中引用出现在C++中的理由,也是为了在一定程度上回避一下C语言中的指针问题。

引用相当于  常指针

 int  a;

int &b=a;

//实际上是下述代码的伪装表示

int  *  const  pt= &a;

 其中引用 b扮演的角色与表达式 *pt 是完全相同的。

3:说完了第二个问题就该说说常指针和指向常量的指针的区别了

先说一下概念  常指针  是指针指向的位置不能改变,也就是指针的指只能赋值一次。指向常量的指针 是指指针指向的对象不能改变,也就是说不能通过这个指针来改变指向对象的指,而指针自身的指向是可以改变的。

再说一下具体的形式

//以下两种为指向常亮的指针
const char *p;
char const *p;
//以下为常指针
char * const p;

区分就是看  * 和const 谁离指针变量名 p近,如果是  * 离的近,表示该指针指向一个常量。

反过来如果是 const离的近,则代表是一个常指针。

4:

const int n=5;

int const n=5;

完全等价。

另:指向常亮的指针不能进行左值操作

<think>好的,我现在需要解释指向常量指针常指针指向常量常指针这三个概念。首先,我得回忆一下C++中指针const关键字的不同组合方式。 记得指针本身是一个变量,它存储的是另一个变量的地址。而const关键字用来定义常量,即不可修改的值。当const与指针结合时,位置不同,含义也会不同。例如,const放在类型前面放在星号后面的区别。 首先,指向常量指针。这时候,指针指向的内容是常量,不能通过这个指针来修改所指向的值,但指针本身可以指向其他地址。比如,const int* ptr,这里ptr是一个指向常量整数的指针,所以*ptr不可修改,但ptr可以指向别的int常量。 然后是常指针,也就是指针本身是常量,不能改变指针指向,但可以通过指针修改所指向的值。比如int* const ptr = &a;,这里ptr一旦初始化后就不能再指向其他地址,但*ptr = 5是可以的,修改的是a的值。 最后是指向常量常指针,这种情况下指针本身不能改变指向,同时也不能通过它修改所指向的值。比如const int* const ptr = &a;,ptr既不能指向其他地址,也不能通过ptr修改a的值,即使a本身可能不是常量。 需要确认这些理解是否正确,有没有混淆的地方。例如,指向常量指针是否真的允许指针本身改变指向,而常指针是否真的固定了地址。另外,指向常量常指针是否同时具备两种const特性。 可能还要考虑例子是否恰当,比如在常指针的例子中,如果a是普通变量,那么通过常指针修改它是允许的,但如果a本身是const,那么即使有常指针,也不能修改。所以在定义的时候需要注意原变量的类型是否匹配。 总结起来,这三个概念的区别主要在于const修饰的是指针指向的数据,还是指针本身,或者两者都被修饰。需要分清楚每个情况下的限制,避免在实际编程中出现错误。</think>在C++中,指针与`const`的组合使用有三种典型情况,其核心区别在于**约束对象不同**: --- ### 一、指向常量指针(Pointer to Constant) **特性**: - 指针指向的内容不可修改 - 指针本身可以指向其他地址 **语法**: ```cpp const int* ptr; // 或 int const* ptr; ``` **示例**: ```cpp const int a = 10; const int* ptr = &a; // *ptr = 20; // ❌ 错误:不能修改指向的值 ptr = nullptr; // ✅ 正确:指针本身可以修改 ``` --- ### 二、常指针(Constant Pointer) **特性**: - 指针本身不可修改(始终指向同一地址) - 可通过指针修改指向的值(若指向常量) **语法**: ```cpp int* const ptr; ``` **示例**: ```cpp int a = 10; int* const ptr = &a; *ptr = 20; // ✅ 正确:修改指向的值 // ptr = &b; // ❌ 错误:指针本身不可修改 ``` --- ### 三、指向常量常指针(Constant Pointer to Constant) **特性**: - 指针本身不可修改 - 指向的内容也不可修改 **语法**: ```cpp const int* const ptr; ``` **示例**: ```cpp const int a = 10; const int* const ptr = &a; // *ptr = 20; // ❌ 错误:不能修改指向的值 // ptr = nullptr; // ❌ 错误:指针本身不可修改 ``` --- ### 总结对比 | 类型 | 能否修改指针指向 | 能否通过指针修改值 | |-----------------------|------------------|--------------------| | 指向常量指针 | ✅ | ❌ | | 常指针 | ❌ | ✅(若指向常量) | | 指向常量常指针 | ❌ | ❌ | **关键点**: - `const`在`*`左侧 → 保护指向的值(如 `const int*`) - `const`在`*`右侧 → 保护指针本身(如 `int* const`) - 双重`const` → 同时保护值指针(如 `const int* const`)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值