int* const p指针常量与const int* p常量指针的区别 & 数组名是不可修改的左值

 目录

一、指针常量与常量指针的定义

二、详细解释以及应用:

 1. 指针常量(数组名是不可修改的左值

 2. 常量指针

3. 号外:怎么看const修饰谁?到底是指针常量还是常量指针?

4. 常量指针常量


一、指针常量与常量指针的定义

int a = 1;int *p = &a,注意区别指针指向的值*p 与 指针的指向p ...

1. 指针变量:指针的指向是可以改变的指针,且指针指向的值只能是变量;

2. 指针常量:int* const p,指针的指向不能修改,但是可以修改指针指向的值;

3. 常量指针:const int* p ,指针指向的值是常量,不能修改。但是可以修改指针的指向,修改                           成指向别的常量;

4. 常量指针常量:const int* const p,常量指针--指针指向的值是一个常量,指针指向的值不能                                   修改,且指针常量--指针的指向不能修改。

二、详细解释以及应用:

在了解这俩是什么之前,我们要先明白指针变量是什么...

   p是一个指针变量,也就是我们口中常说的指针,指向的是变量的地址。
   ①p是变量,变量有自己本身的地址,可以被修改 --> 此时修改的是指针p本身的内容(指针的指向即指针的地址)
   ②p是个指针变量,解引用可以找到指针指向的地址的内容,且指针指向的内容没有被限制,可以被修改 --> 修改的是指针指向的内容*p

  一旦①或②被const限制住,相对应的部分就不能被修改,就有了指针常量和常量指针...

 1. 指针常量(数组名是不可修改的左值)

看图说话:

指针常量,表示p本身不可以被修改,但是可以通过解引用p改变p指向的内容。也就是*p=2可行。 

 经典应用:数组名可作为指针常量。

示例: 

数组名arr1不可被修改。因为数组名是数组首元素的地址,具有指针一部分的性质。所以其实在这里,arr1相当于指针常量。所以我们常说:数组名是不可修改的左值。

数组名是不可修改的左值,也是数组和数组之间不能直接赋值的原因。不能用arr1=arr2。

关于数组之间的赋值,可以看数组之间的赋值方法

 2. 常量指针

看图说话:

常量指针,表示指针指向的内容不可修改,但是指针本身是可以被修改的。也就是p=&b可行。 

 经典应用:字符串指针就是常量指针。

 示例:

👋🏻char* p1 = "abc" 怎么解释?

并不是把"abc"放进指针p中,而是将"abc"字符串中的第一个元素a的地址存放进指针p中;

字符串常量"abc"存放在内存中的只读数据区,不能被修改,是常量指针。

👋🏻 为什么p1,p2的地址一模一样?

因为字符串常量不会被改变,就是同一个字符串,内存中没必要存两份。并且指针中存放的是字符串常量首元素的地址,既然是同一个字符串的,当然地址也一样。

简单说,p1,p2指向同一块地址空间。

3. 号外:怎么看const修饰谁?到底是指针常量还是常量指针?

先思考一下这个题:

分析:const修饰只有两种情况,文章开头的绿色加粗字体也提到了:const修饰*p和const修饰p

int const *p 和 const int *p  修饰的都是*p,所以等价,选C

4. 常量指针常量

指向常量,指针不能改变指向的实体的值,指针值(即指针的指向)也不能改变(是2和3的结合)

如果想要指针的指向以及指针指向的值都不被修改,这个时候就可以用常量指针常量。应用场景暂时还没碰到,后续碰到追加...

🔊 题外话:在查找找资料验证结论的时候,发现一个博主总结的超级好。就是开头的那张图片,如果想看原版,可以去这里:点这里    🏃‍♂️🏃‍♂️🏃‍♂️🏃‍♂️🏃‍♀️🏃‍♀️🏃‍♀️🏃‍♀️

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值