int const *a 等解析

本文详细解析了C++中const修饰符的不同应用场景及其含义,包括const修饰对象值与地址的情况,以及如何正确使用指向const对象的指针。
关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里
1、
const int *a
这里const 修饰的是int,而int定义的是一个整值
因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象
eg:
       const int *a = 0;
       const int b = 1;
       int c = 1;
        a = &b  //ok!  额外:注意不能通过a 来修改 b值
     a = &c  //ok!   额外:虽然c本身不是一个常量
     *a = 2  //erro! 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。
2、
int  *const a       
这里const修饰的是 a ,a代表的是一个指针地址
因此不能赋给a其他的地址值,但可以修改a指向的值
这有点和cont int *a相反的意味,例子就不说了

3、至于
int const *a 和 const int *a 的意义是相同的 他们两个的作用等价

补充:
4、
const int * const a
这个代表a所指向的对象的值以及它的地址本身都不能被改变

关于const的点滴补充:
1、const 对象的地址只能赋值给指向const 对象的指针
2、指向const 对象的指针可以 被赋 以 一个非const 对象的地址
3、指向const 得指针常被用作函数的形式参数,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改
4、常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const得问题,所以没有赋值,实际语句中要赋值的)

`int const* const p` 是 C++ 中一个经典的指针声明,理解它需要掌握 **指针与 const 的结合规则**。我们来详细分析它的含义、用法以及与其他类似声明的区别。 --- ## ✅ `int const* const p` 的含义 我们可以从右到左来解析这个声明: ```cpp int const* const p; ``` ### 分解为两部分: - `int const*`:一个指向 `const int` 类型的指针; - `const p`:这个指针本身是常量(不可修改); ### 所以整体含义是: > 一个指向常量整型的常量指针。 --- ## ✅ 通俗解释 - `p` 是一个指针; - `p` 本身是常量,不能指向其他地址; - `p` 指向的内容是常量,不能通过 `p` 修改; ### 示例代码: ```cpp int a = 10, b = 20; int const* const p = &a; // 错误:p 是 const 指针,不能重新赋值 // p = &b; // 错误:p 指向的内容是 const,不能修改 // *p = 100; // 正确:可以读取内容 cout << *p << endl; ``` --- ## ✅ 与类似声明的对比 | 声明 | 指针能否改变 | 指针指向的内容能否改变 | |---------------------|----------------|---------------------------| | `int* p;` | ✅ | ✅ | | `const int* p;` | ✅ | ❌ | | `int* const p;` | ❌ | ✅ | | `const int* const p;`| ❌ | ❌ | | `int const* const p;`| ❌ | ❌ | > `const int* const p` 和 `int const* const p` 是等价的。 --- ## ✅ 应用场景 1. **防止指针被意外修改**; 2. **用于函数参数中保护数据不被修改**; 3. **常量指针传递只读数据**,例如: ```cpp void printArray(int const* const arr, int size); ``` --- ## ✅ 常见错误 ```cpp int const* const p; // 错误:p 是 const 指针,必须初始化 ``` ✅ 正确做法: ```cpp int a = 10; int const* const p = &a; // 正确 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值