当前位置:网站首页>指针常量和常量指针概述
指针常量和常量指针概述
2022-08-02 17:57:00 【liebecl】
const
const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着“只读”。任何修改该变量的尝试都会导致编译错误。const是通过编译器在编译的时候执行检查来确保实现的(也就是说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器,就可以修改const定义的常量,而运行时不会报错。
规则:
const离谁近,谁就不能被修改;
因为常量在定义以后就不能被修改,所以使用const定义变量时必须初始化。
const point
声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。三种定义形式如下:
Pointer to constant
const int *ptr;
int const *ptr;
Constant pointer to variable
int *const ptr;
constant pointer to constant
const int *const ptr;
各个含义如下:
- const int * pOne;
You cannot change the value pointed by ptr, but you can change the pointer itself. - int * const pTwo;
You cannot change the pointer p, but can change the value pointed by ptr. - const int *const pThree;
You can neither change the value pointed by ptr nor the pointer ptr.
重点理解
指针和 const 谁在前先读谁 ;
*象征着地址,const象征着内容;
谁在前面谁就不允许改变。
例如:
int const *p1 = &b; //const 在前,定义为常量指针
int *const p2 = &c; // *在前,定义为指针常量
常量指针是指指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量。
指针常量是指指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。
示例
常量指针
指向常量的指针,指针的地址可以变,指针指向的内容不能变。
#改变指针b指向地址的内容
int main()
{
int a = 2;
int const *b = &a;
*b = 3; //报错:b是常量指针,指向的内容不能变
printf("albert:%d\n",a);
}
#改变指针b的指向
int main()
{
int a = 2;
int b = 3;
int const *c = &a;
printf("albert:%p\n", c);
c = &b;
printf("albert:%p\n",c);
}
指针常量
指针是一个常量,指针的地址不能变,指向的内容可以变。
int main()
{
int a = 2;
int b = 3;
int *const c = &a;
printf("albert:%p\n", c);
c = &b; //报错:指针常量,指针的地址不能变
printf("albert:%p\n",c);
}
int main()
{
int a = 2;
int b = 3;
int *const c = &a;
*c = 4;
printf("albert:%d\n",*c); //4
}
————
2022/08/02
家中
边栏推荐
- [论文分享] VideoFlow: A Flow-Based Generative Model for Video
- 故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
- 多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究
- 有关代购系统搭建的那点事
- 灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
- 查看数据库数据量大小,占用磁盘大小
- Enterprise cloud cost control, are you really doing it right?
- VSTO踩坑记录(1)- 从零开始开发outlook插件
- 常用随机变量的数学期望和方差
- 什么是会话劫持以及如何阻止它
猜你喜欢
LeetCode 2333. 最小差值平方和(贪心)
我用这一招让团队的开发效率提升了 100%!
Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
技术人生 | 如何设定业务目标
Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
研发运营一体化(DevOps)能力成熟度模型
VSTO踩坑记录(1)- 从零开始开发outlook插件
Electronic Industry Inventory Management Pain Points and WMS Warehouse Management System Solutions
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
LeetCode 2349. 设计数字容器系统(SortedSet)
随机推荐
golang刷leetcode 字符串(4)逆波兰式
MySQL LIKE – 语法和用法示例教程
shell中awk命令的if条件语句引入外置变量
基于HDF的LED驱动程序开发(1)
浅谈混迹力扣和codeforces上的几个月
危及安全的常见物联网攻击有哪些?
golang刷leetcode动态规划(10)编辑距离
54.【system系统互动函数大总结】
天翼云4.0分布式云赋能千行百业数字化转型
MySQL命令(命令行方式,而非图形界面方式)
WPF使用Prism登录
常用随机变量的数学期望和方差
2022最新版SSM源码分析:一套教程助你深入理解底层原理,提高核心竞争力!
多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究
下载mysql的源码包
千万级别的表分页查询非常慢,怎么办?
Openharmony - 基于ArkUI(TS)开发颜色选择器
织梦提示信息提示框美化
Redis总结_实战篇
Interviewer: can you talk about optimistic locking and pessimistic locks