【C++】const 修饰指针

常量指针

const int *p1 = &a; 等价 int const *p2 = &a;(const 在*的右边---常量指针)

规则:

  1. 指针本身可以修改 (能修改指针的指向)
  2. 不能通过指针修改指向的值 (不能修改指针的数值)

记忆:const 修饰 *,保护解引用后的值,不保护指针本身

复制代码
int a = 10;
int b = 20;

	//常量指针 -- 指针指向可以修改,不可修改指针的数值
	// : const int*  / int const *
	const int* p1 = &a;
	p1 = &b;
	/*p1 = 11;*/ // 编译报错,不能改变所指空间的值
	int const* p2 = &a;
	p2 = &b;

指针常量

int *const p3 = &a; (const 在* 左边-- 为指针常量)

  • 规则:

    1. 指针本身不可修改p3 = &b; 编译报错,指针指向一旦初始化就固定
    2. 可以通过指针修改指向的值*p3 = 11; 合法,值不受 const 保护
  • 记忆:const 修饰指针变量 p3,保护指针本身地

    int a = 10;
    int b = 20;

    //指针常量 指针指向不可修改,可修改指针的数据
    int* const p3 = &a;
    /*p3 = &b; */ // 编译报错
    *p3 = 11;

指向常量的指针常量

(双重 const)

const int *const p4 = &a;

规则:

  1. 指针指向不能改:p4 = &b; 报错

  2. 指向的数据不能改:*p4 = 111; 报错

  3. 用途:只读指针,既不能换指向,也不能修改数据

    int a = 10;
    int b = 20;

    //双重const 指向指针的常量指针
    const int* const p4 = &a;
    /p4 = &b;/ // 不能修改指针的指向
    /p4 = 11;/ // 不能修改指针的数据

总结

  1. 看 const 在 * 左边:const int * / int const * → 常量指针,值不可改,指向可改
  2. 看 const 在 * 右边:int *const → 指针常量,指向不可改,值可改
  3. * 左右都有 const:双重限制,指向和值全都不能改
相关推荐
·薯条大王1 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
hansang_IR5 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘6 小时前
day7.c++继承
c++
沫璃染墨6 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
吃着火锅x唱着歌6 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
醉城夜风~7 小时前
(超详细)C++ STL list容器详解:从使用方法到双向链表底层原理全面解析
c++·windows
烟花落o8 小时前
C++ 从 C 到进阶 ②:引用、inline 、nullptr
c++·引用·inline·nullptr·c++入门
liulilittle8 小时前
MOE路由:路由(logits: top-k/8)
c++·人工智能·算法·机器学习·llm
旖旎夜光8 小时前
LeetCode 11:盛最多水的容器(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
我不会插花弄玉10 小时前
15.map,set下:AVL树,红黑树和map,set的封装【由浅入深-C++】
c++·stl