常量指针与指针常量

一、常量指针

形式:const int * p; 或者int const * p;

定义:就是常量的指针,指向的是一个常量,但是这个常量是指针的值,而不是地址指向的值,这里“常量”修饰的是指针的值,。

关键点:

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

2、常量指针可以被赋值为变量的地址,但是之所以叫常量指针,是限制通过这个指针修改变量的值;

3、指针还可以指向别处,因为指针本身只是变量,可以指向任意地址。

二、指针常量

形式:int * const p;

定义:本质就是常量,用指针修饰它。

关键点:

1、指针常量指向的地址不可以变;

2、指向的内容可以变;

  const int * p19 = NULL; //声明常量指针p19
  int const * p19_1 = NULL;//声明常量指针p19_1
  int i = 9;
  p19 = &i; //常量指针指向i
  p19_1 = p19;
  cout << "&i=" << &i << ", i=" << i << endl;
  cout << "p19=" << p19 << " , *p19=" << *p19 << endl;
  cout << "p19_1=" << p19_1 << ", *p19_1=" << *p19_1 << endl;

 // *p19 = 10; //error: assignment of read-only location ‘* p19’不允许修改常量指针指向的内容
  i = 10;//可以通过修改指向的变量修改常量指针指向的内容
  cout << "*p19" << *p19 << " " << *p19_1 <<  " " <<*p19_1 <<endl;
  int j =8;
  p19=&j; //修改常量指针指向的地址
  cout << "&j=" << &j << ", j=" << j << endl;
  cout << "p19=" << p19 << ", *p19=" << *p19 << endl;
  
  int * const p20 = &i; //声明指针常量
  cout << "p20=" << p20 << ", *p20=" << *p20 << endl;
  //p20 = &j;//error: assignment of read-only variable ‘p20’ 不允许修改指针常量指向的地址
  *p20 = j; //修改指针常量指向的内容
  cout << "p20=" << p20 <<", *p20=" << *p20 << endl;
  cout << "&i=" << &i << ", i=" << i << endl;
运行结果:
&i=0x7ffc4c8db7b8, i=9
p19=0x7ffc4c8db7b8 , *p19=9
p19_1=0x7ffc4c8db7b8, *p19_1=9
*p1910 10 10
&j=0x7ffc4c8db7c0, j=8
p19=0x7ffc4c8db7c0, *p19=8
p20=0x7ffc4c8db7b8, *p20=10
p20=0x7ffc4c8db7b8, *p20=8
&i=0x7ffc4c8db7b8, i=8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值