const修饰指针的情况

本文详细介绍了C++中const关键字在指针上下文的应用,包括const修饰指针变量和指针所指内容的区别。当const位于*前时,禁止修改指针解引用后的值;当const位于*后时,禁止修改指针自身指向的地址。通过实例展示了const如何影响指针行为,帮助理解const在指针类型中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的,但本质上还是变量。 

int main()
{
   int a = 10;
   a=20;
}

int main()
{
   const int a = 10;
   a = 20;   //  不可行
}

而使用指针变量时,发现可以通过指针将a的值改变

int main()
{
   int a = 10 ;
   int* p = &a;   // 将a的地址存放在p中, p是变量名,*p代表p是指针变量,int表示它所指向的对象是int类型
   
   *p = 20;       // 可行
}

当用const修饰指针时,const放在不同的位置,会有不同的效果

1.const放在 *前, 修饰 *p

int main()
{
   int a = 10 ;
   const int* p = &a;   
   // 或者写成 int const * p = &a;
   *p = 20;      // 不可行 , const放在 * 前面,修饰的是 *p,*p代表对p解引用找到a(也就是说 *p=a),而*p受到限制不能改变,则也不能通过这种方法改变a。
}

const限制 *p时,并没有对p限制,也就是说,此时我们可以改变p的值,使p存放其他变量的地址

int main()
{
   int a = 10 ;
   int b = 5;
   const int* p = &a;   
   // 或者写成 int const * p = &a;
   *p = 20;      // 不可行 
   p = &b        // 可行
}

2. const放在 * 后,修饰p

int main()
{
   int a = 10 ;
   int b = 5;
   int* const p = &a;         // 此时const修饰的是 p
   *p = 20;      // 可行 
   p = &b        // 不可行    //  则p不能发生改变
}

总结就是  const修饰变量时,要分清修饰的是指针变量 p,还是 指针变量所指向的内容 *p

放在 * 前 , 修饰限制的 是 *p(解引用后指向的变量),则这个变量(指针指向的内容)不能被改变,而指针变量本身不受到限制。

放在 * 后, 修饰限制的是 p(指针变量时),指针变量不能发生改变,是谁的地址就是谁的地址。 但指针变量的内容(指向的变量)可以发生改变。

同样,当写成 int const * const p = &a;时    二者都不能发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值