第一天来认识认识指针与const

来源:互联网 发布:西语记单词软件 编辑:程序博客网 时间:2024/05/17 23:55
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;}



1 0