一步到位:指针与const关键字
2022/8/15 6:26:43
本文主要是介绍一步到位:指针与const关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享
- 2024-04-14stopped 状态设置为变量,由外部传递进来-icode9专业技术文章分享
- 2024-04-14为什么ansible执行远程脚本需要放到后台-icode9专业技术文章分享
- 2024-04-14shell 正则判断字符串内是否含有th-icode9专业技术文章分享