ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一步到位:指针与const关键字

2022-08-14 20:04:00  阅读:142  来源: 互联网

标签:限定 const pt 10 int 关键字 一步到位 指针


const关键字为C++/C中的关键字,const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。这个常类型可以是指针,也可以是int等变量。

const的用法常见有以下四种:

const int n = 10;//限定整型变量n的值为10
const int *pt = &n;//限定pt指针的指向关系允许修改,当通过地址修改n值时不允许
int *const pt = &n;//限定pt指针的指向关系不允许修改,当通过地址修改n值时允许
const int *const pt = &n;//即限定指向关系,也限定指向n时只读

对于第一种用法我们不做讲解,我们来逐步演示后续几种const的作用:

int n = 10;
int* pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;

步骤一:此时可以修改变量n的值,但是const 指针pt后,编译器提示错误:

int n = 10;
const int* pt = &n;
cout << "n value:" << n << endl;
*pt = 20;//const后,此操作错误
cout << "n value:" << n << endl;

步骤二:这是因为const指针pt后编译器讲不允许通过pt指针修改,但是可以通过其他指针修改,比如:

int n = 10;
const int* pt = &n;//限定指针
int* pm= &n;//限定指针
cout << "n value:" << n << endl;
*pm = 20;//可以通过其他指针修改
cout << "n value:" << n << endl;

步骤三:我们更进一步,讲const的用法高级一下:

int n = 10;
int* const pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;

此时仍然可以修改n的值,这是为什莫呢?
因为步骤一、二中我们const限定的是*pt这个指针,但是此时我们限定的是pt的内存地址,而不是指针pt,只要在初始化时int* const pt = &n,那么就可以修改n的值。这里其实大家也就明白了,此时如果我们去修改pt内存地址,肯定是不允许的,比如;

int n = 10;
int m = 20;
int* const pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;
pt = &m;//修改pt的内存地址是不允许的

到这里我们总结一下步骤一、二、三中的const的区别:

int* const pt = &n://只限定了指向关系,指向对象n时可以修改n
const int* pt = &n;//只限定了指向对象n时只读n,但是指向关系没有限定

 最后,我们来看第四种用法,其实就是第二种和第三种用法累加:

int n = 10;
int m = 20;
const int* const pt = &n;
*pt = 20;//不可以修改n值
pt = &m;//不可以修改指向关系,也就是pt的地址值
cout << "n value:" << n << endl;
cout << "n value:" << *pt << endl;

标签:限定,const,pt,10,int,关键字,一步到位,指针
来源: https://www.cnblogs.com/YiMo9929/p/16586149.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有