指针常量和常量指针的区别【const int *和int const*和int* const】

 

常量:const int 和 int const

const 用来定义常量,所以const int 和 int const在修饰普通的变量类型(除指针)作用是相同的。

如:

	int const a=5;
	const int b=10;

a,b都是int型常量,不能被修改。

 

常量指针:const int* 和int const * 

只要const位于*的左侧,无论它在类型名的左边或右边,都声明了一个指向对象的指针,叫做常量指针

	int a=10;
	int *q=&a;
	const int *p=&a;

定义一个变量a,q是一个普通的指向a的指针,p则是常量指针。这两者有什么区别呢?

普通指针q可以修改a,而对于指针p,不管他指向的是常量还是变量,在他眼中都是常量,都是不可修改的。也就是说常量指针是不能修改指向对象的的指针。

常量指针的本质还是指针,可以指向任何变量或常量,也可以更改指向的对象,但是不管指向谁,他都不能去修改那个指向对象的值。

应用场景:

在函数参数传递时,往往需要传递指针(地址)或引用传递,通过地址修改数据是很容易的,为了防止函数修改数据,用const修饰指针,这就是常量指针。

#include <iostream>
using namespace std;

int a[100]={0,1,2,3,4,5,6,7,8,9,10}; 
 
void find(const int *a){
	cout<<a[0]<<endl;
	cout<<a[5]<<endl;
	a[3]=10;
}
 
int main(){
	find(a);
}

 

指针常量:int * const

声明方式:

int a;
int* const p = &a; //const放在指针声明操作符的右侧

只要const位于指针声明操作符右侧,就表示声明的对象是一个常量,且它的内容是一个指针,也就是一个地址。

上面的声明可以这么读:声明了一个常量p,它的值是变量a的地址(变量a的地址就是指向变量a的指针)。

指针常量是一个常量,在声明的时候一定要赋初始值。一旦赋值,这个常量再也不能被修改。

指针常量可以通过本身的指针特性去修改指向的对象

 

指针常量是将一个常量(常量的值是地址)与一个对象锁定,一个指针常量绑定了一个对象后,就无法再更改,但是这个指针常量拥有和对象一样的权限,可以修改对象,也就是说他们现在合为一体了。

应用场景:

引用。引用的本质就是一个指针常量。

关于引用:https://blog.csdn.net/qq_21989927/article/details/107447970

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值