扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
指针常量:int* const ptr;不能改变存储的地址,即不能改变指针的指向
常量指针:const int* ptr;不能通过该指针修改其指向的值,即如果用常量指针操作指向的数据时,只能读不能写
首先,指针的四个属性:
1、自身的值(指向值的地址)
2、自身的类型
3、指向的值
4、指向的类型
const修饰的无非就是1、3两个属性
记忆逻辑如下:(通过数组的特性来辅助记忆)
先记住指针常量,联系数组名的值是一个地址,也就是地址常量,其实地址常量等价于指针常量
那么因为知道数组名的值(自身值)是不能改变的,而数组内的元素(指向的值)是可以改变的
综上,记住指针常量(地址常量)不能改变自身值,而可以改变其指向值;
常量指针反之即可,自身值可以改变,却不能通过指针改变指向的值
通过以上知识我们就可以思考,C语言是如何实现数组这个数据类型的了
数组名的底层无非就是指针常量,运算符A[x]等价于*(A+x),
通过运算符[]计算数组名这个指针常量与整数的的加减就可以引用数组内的各个元素了
数组的声明就是向栈内申请分配大小对应的内存空间,类似于使用malloc向堆申请内存空间,都是分配连续的内存空间
还有一件事
const int a=10;
int* p=&a;
*a=20;
以上代码本意是a的值不可修改,但是通过指针,却确实修改了a的值,
所以在写代码时,如果要把一个变量的地址赋值给指针,若变量本身被const修饰,那么应该把地址赋值给常量指针,避免通过指针修改了变量本身
其实以上都是为了加深常量指针与指针常量的理解,想要快速上手这两个概念,一个口诀就搞定了
口诀:在前先读,在前不变
解释:
在前先读:const在前就先读常量,*在前就先读指针;(区分const int* 和int* const的读法)
在前不变:const是把锁,看const是在*p前面还是在p前面,
如果在*p前面表示锁住了通过指针改变指向内容这个操作
如果只是在p前面,表示锁住了p本身这个指针变量的值,初始化后不可以发生p=&b这种操作(b是其他变量)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流