c++之指针常量和常量指针


1.常量指针

 const int  *PtrConst 或者是 int const  *PtrConst (即const 在*的左边)
指向常量的指针,这里所说的“常量”其实在解引用时起到所谓常量的作用,并非是指向的变量就是常量,指向的变量既可以是非常量也可以是常量。总体意思是不能修改指向某变量的值。

让指针指向一个常量,可以防止使用指针来修改所指向的值。

1.常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;

	int a = 1;
	const int *p = &a;
	std::cout << *p << a << std::endl;
	a = 2;//可以
	std::cout<< *p << a << std::endl;

结果
  *p = 2;
   a = 2;

如果是  *p = 3; //报错

因为不能通过这个指针来修改,所以可以用常量指针当函数的参数使用。
2.指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;

	int a = 1;
	const int *p = &a;
	std::cout << "p= "<< *p <<";" << "a=" << a << std::endl;
	int b = 2;
	p = &b;
	std::cout<<"p= "<<  *p << ";" <<"b=" <<  b<< std::endl;

p= 1;a=1
p= 2;b=2

延伸:

1.可以将const 变量的地址赋给指向const 的指针(即常量指针)。

 如 const  int  a = 1;   const int * p = &a;//可以

2.不可以将const 的地址赋给常规指针。

如 const  int  a = 1;    int * p = &a;//不可以

除非使用强制类型转换,const_cast

    const int a = 1;
    int *p = const_cast<int*>(&a)//可以

2.指针常量:

int   *const PtrConst;
本质是一个常量,而用指针修饰它。指针常量的值是指针。

1.必须初始化,只能指向一个变量,绝不可再改变指向另一个变量

   //int *const ConstPtr;//报错,error C2734: “ConstPtr”: 如果不是外部的,则必须初始化常量对象

    int a=1;    int *const ConstPtr=&a; //可以
    int b = 2;   ConstPtr=&b;   //不可以

2.指向的地址所对应的内容可以变化。

int a=1;    int *const ConstPtr=&a;    ConstPtr = 3; //可以

如果出现在星号两边,表示被指物和指针都是常量。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值