const指针,const int * p, int *const p,int const * p的区别

来源:互联网 发布:全球产品复制软件 编辑:程序博客网 时间:2024/05/17 04:49
#include <iostream>using namespace std;int main(){    int Int1 = 1;    int Int2 = 0;    const int* pInt1 = &Int1;//声明一个指向常量的指针,指针是可变的,但是所指向的内存单元的内容不可变    int* const pInt2 = &Int2;//声明了一个常量指针,指针是不可变的,但是它所指向的内存单元的内容是可变的    
    cout<<"*pInt1 = "<<*pInt1<<endl;    cout<<"*pInt2 = "<<*pInt2<<endl;    *pInt1=2;    pInt2=&Int1;    cout<<"*pInt1 = "<<*pInt1<<endl;    cout<<"*pInt2 = "<<*pInt2<<endl;    int n;//为了不让屏幕一闪而消失    cin>>n;    return 0;}
复制代码

这样子运行会弹出错误如下

复制代码
1>------ 已启动生成: 项目: vs2008, 配置: Debug Win32 ------1>正在编译...1>main.cpp1>g:\学习\vs2008project\vs2008\vs2008\main.cpp(12) : error C3892: “pInt1”: 不能给常量赋值1>g:\学习\vs2008project\vs2008\vs2008\main.cpp(13) : error C3892: “pInt2”: 不能给常量赋值1>生成日志保存在“file://g:\学习\VS2008Project\vs2008\vs2008\Debug\BuildLog.htm”1>vs2008 - 2 个错误,0 个警告========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
复制代码


这里就说明了

pInt1是一个指向整型变量的指针,它所指向的值不能改变,就是 *pInt1这个值不能修改,pInt1所指向的地址可以修改,即pInt1可以修改

pInt2是一个指向整数的常量指针,指针是常量,就是说指针所指向的地址不能改变,就是说pInt2的值不能改变,但是*pInt2可以修改.

可以这样子理解

对于pInt1的定义,const右边是int,所以pInt1所指向的值是常量

对于pInt2的定义,const右边是变量,所以这个变量是常量,而这个变量是什么呢?是看完完整的定义,它是指针,所以这个是指针常量.

下面再看看

int  const * p

复制代码
#include <iostream>using namespace std;int main(){    int Int1 = 1;    int Int2 = 0;    const int* pInt1 = &Int1;    int* const pInt2 = &Int2;    cout<<"*pInt1 = "<<*pInt1<<endl;    cout<<"*pInt2 = "<<*pInt2<<endl;    *pInt1=2;//第12行    pInt2=&Int1;//第13行    cout<<"*pInt1 = "<<*pInt1<<endl;    cout<<"*pInt2 = "<<*pInt2<<endl;    int  const * pInt3 = &Int1;    *pInt3=2;//第17行    pInt3=&Int1;    cout<<"*pInt3 = "<<*pInt3<<endl;    int n;//为了不让屏幕一闪而消失    cin>>n;    return 0;}
弹出错误如下1>------ 已启动生成: 项目: vs2008, 配置: Debug Win32 ------1>正在编译...1>main.cpp1>g:\学习\vs2008project\vs2008\vs2008\main.cpp(12) : error C3892: “pInt1”: 不能给常量赋值1>g:\学习\vs2008project\vs2008\vs2008\main.cpp(13) : error C3892: “pInt2”: 不能给常量赋值1>g:\学习\vs2008project\vs2008\vs2008\main.cpp(17) : error C3892: “pInt3”: 不能给常量赋值1>生成日志保存在“file://g:\学习\VS2008Project\vs2008\vs2008\Debug\BuildLog.htm”1>vs2008 - 3 个错误,0 个警告========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
复制代码

这样子就说明
int  const * p 和int * const  p是一致的,所以只要看const右边的是什么就可以判断了

int const * p 中const右边是*p 所以p是一个指针常量

int* const  p 中const右边是p,所以这个变量是常量,这个变量是指针,所以这个也是指针常量

const int* p 中const右边是int,所以这个整型是常量,所以说这个*p的值不能改变;

int const *a const;//说明a是一个常量指针(指针不可改变),而且所指向的内存空间的值是不能改变的

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 日本签证照片被使馆贴错了怎么办 在菲律宾护照和签证丢了怎么办 新疆工地上班老板不肯发工资怎么办 德国大使馆签证如果拒签了怎么办 护照在大使馆办签证期间出国怎么办 法院两次判决不准离婚我该怎么办? 法院判决不准离婚妻子不回来怎么办 被告人在不调解的情况下怎么办 知道弟兄的孩子是别人的怎么办? 办居住证的回执单丢了怎么办 领取居住证的回执单丢了怎么办 北京居住证网上申报信息填错怎么办 买家退回来的货有问题怎么办 居转户过程中生的小孩户口怎么办 人才引进申请上海户口被拒怎么办 网络购高铁票身份证没有验证怎么办 高速遇到很浓的团雾怎么办 对于大巴不按座位坐的人该怎么办 火车上遇到占座不让的人怎么办 滁州婴儿打疫苗的绿本子怎么办 检查四维说宝宝嘴巴显示不清怎么办 携程订票付款成功一直没出票怎么办 手机微信支付密码忘了怎么办 存入卡里的钱却说余额不足怎么办 买高铁票身份证未通过审核怎么办 网上订演出票不配送了怎么办 百度糯米订的演出票不配送了怎么办 高铁误点改签后的车次没票了怎么办 高铁晚点没赶上下班车怎么办 上班期间单位没给交养老保险怎么办 一键启动车钥匙遥控失灵怎么办 已经订购的火车票误了火车怎么办 飞机去程取消分开买的返程怎么办 订完学生票发现使用次数过了怎么办 坐火车买学生票没带学生证怎么办 买了学生票学生证磁条没了怎么办 买了动车学生票没带学生证怎么办 身份证没磁了怎么办能买火车票 格力空调保修单丢了怎么办 格力空调保修期内坏了怎么办 国际联程航班第一程延误怎么办