【C++基础知识整理--常量指针、指针常量、指向常量的常量指针】

常量指针应用解析

const修饰的是 * p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;

#include <iostream>
using namespace std;
 
int main()
{
    int a = 100;
	int c = 300;
	const int *p = &a; //常量指针,不可以通过指针改变指向对象的值,
				   //也即指针失去了改变指向地址的存储修改权
	cout <<"p  "<<p<<endl;
	cout <<"*p  "<<*p<<endl;
	
	int const *q = &c;	
	cout <<"q  "<<q<<endl;
	cout <<"*q  "<<*q<<endl;
	
	a = 2;            //可以通过原来的声明修改值
	c = 3;
	cout <<"p  "<<p<<endl;
	cout <<"*p  "<<*p<<endl;
	
	cout <<"q  "<<q<<endl;
	cout <<"*q  "<<*q<<endl;
	
	//*p = 1;   error  无修改指针所指内存地址上存储值的权限
	//cout <<p  <<endl;
	//cout <<*p  <<endl;
	
	//*q = 1;   error  无修改指针所指内存地址上存储值的权限
	//cout <<"q  "<<q<<endl;
	//cout <<"*q  "<<*q<<endl;
	
	int b = 200;
	p = &b;
	cout <<"p  "<<p<<endl;
	cout <<"*p  "<<*p<<endl;
	
	int d = 400;
	q = &d;
	cout <<"q  "<<q<<endl;
	cout <<"*q  "<<*q<<endl;
   return 0;
}

运行结果

p  0x7ffcbaf45c2c
*p  100
q  0x7ffcbaf45c28
*q  300
p  0x7ffcbaf45c2c
*p  2
q  0x7ffcbaf45c28
*q  3
p  0x7ffcbaf45c24
*p  200
q  0x7ffcbaf45c20
*q  400



指针常量应用解析

const修饰的是p,p是指针,p指向的地址不能修改,p不能修改,但*p可以修改;

#include <iostream>
using namespace std;
 
int main()
{
    int a =100;
	//const int *p = &a; //常量指针,不可以通过指针改变指向对象的值,
					   //也即指针失去了改变指向地址的存储修改权
	int*  const p = &a;  //指针常量 
	cout <<p<<endl;
	cout <<*p<<endl;
	
	a = 2;            //可以通过原来的声明修改值
	cout <<p<<endl;
	cout <<*p<<endl;
	
	*p = 1;   //error 无修改指针所指内存地址上存储值的权限
	cout <<p<<endl;
	cout <<*p<<endl;
	
	/**
	int b = 200;
	p = &b;
	cout <<p<<endl;
	cout <<*p<<endl;
    **/
   return 0;
}

运行结果

0x7ffdc6862434
100
0x7ffdc6862434
2
0x7ffdc6862434
1

指向常量的常量指针应用解析

指向常量的常量指针既不可以修改指针指向的地址也不可以指向指向内存地址上存储的值,只可以通过原声明修改

#include <iostream>
using namespace std;
 
int main()
{
    int a =100;
	
	const int* const p = &a;//指向常量的常量指针
	
	cout <<p<<endl;
	cout <<*p<<endl;
	
	a = 2;            //可以通过原来的声明修改值
	cout <<p<<endl;
	cout <<*p<<endl;
	
	/**
	*p = 1;   //error 无修改指针所指内存地址上存储值的权限
	cout <<p<<endl;
	cout <<*p<<endl;
	
	
	int b = 200;   
	p = &b;      //error 无修改指针所指内存地址
	cout <<p<<endl;
	cout <<*p<<endl;
    **/
   return 0;
}

运行结果

0x7ffffe51f104
100
0x7ffffe51f104
2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1CROWN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值