int const *p1;
int * const p2;
int const * const p3;
1 先看分析第一个 // 用于只读权限,
用于#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int const a(10);//与 const int val 的效果是一样的
int b(20);
int const *p1(&a);//意思就是指向的是常量 也就是指向的值不可改变,但是可以改变指向 这个地方有点问题 a的类型是const 吗 不是 但是为什么不报错那 是c++的 //权限问题 ,指针在指向的时候不会严格检查类型的const->int 可以,反之报错
int const *p2(&b);
// *p1=2; 会报错的
// *p2=2;
p1=&b;
p2=&a;
cout<<*p1<<*p2<<endl;
return 0;
}
2 来看第二个 //用于可读可写权限 ,不能跳转到别
int main()
{
int a=10;
const int b=20;
int *const p1(&a);//指针是常量 也就是指针不可以改变指向,但是可以改变值
// int *const p2(&b);//出错 指向的是 int 但是b是常量 出错
// p1=&b; 报错
// p2=&a;报错
*p1=1;
*p2=2;
cout<<*p1<<*p2<<endl;
return 0;
}
3 第三个 适用于只读权限不能跳转
int main()
{
int a=5;
const int b=10;
const int * const p1(&a);//常量指针指向 常量
const int * const p2(&b);
// *p1=1;
// *p2=2;
// p1=&b; 不能修改也不能指向其他的 错误
// p2=*a;
cout<<*p1<<*p2<<endl;
}
4 综合案例 引用常量的过程
int select(const int & rnum )
{
return rnum;//return 在这里有强转的功能
}
int main()
{
const int num=100;
int numA=200;
cout<<select(num)<<endl;
return 0;
}
5 来看一个银行有趣的事情
int select(const int & rnum )
{
//引用const的目的是为了方式修改rnum
//rnum=rnum-0.02; 现在是不能修改的
int *p=const_cast<int*> (&rnum);//强制把const 属性去掉
*p=*p-2;
return *p;//return 在这里有强转的功能
}
int main()
{
const int num=100;
int numA=200;
cout<<select(numA)<<endl; //传递的是Numa 这时候已经修改了
cout<<numA<<endl;
cout<<select(num)<<endl;//已经从外部 修改看看实际上有没有改变
cout<<num<<endl; //没有改变 原生的const 外部是无法修改的
return 0;
}