C++学习笔记(二)

本文将主要介绍const关键字的使用。

首先,说一下const是什么: const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

然后,我们来看一下这四处声明:

const int a = 1;  //code1
const int *p = &a;  //code2
int * const p = &a;  //code3
const int * const p = &a;  //code4

下面就具体说一下这四行代码的作用与区别。

code1最简单,即声明a初值为1,且为常量,其值不可更改;

code2即将变量a的地址赋值给p,此时输出*p的值为1,而且若进行*p = 2会报错,也就意味着p所指向的值(a的值)是不可更改的;

code3因为const修饰的变量是p,同code1,也就意味着p存储的值(变量a的地址,也就是p指向的地址)是不可更改的,若进行p = &b会报错;

code4综合code2 code3即可得出结论,p指向的地址和p指向变量的值都是不可更改的。

指针和const

现在,我们再来看一下指针与const结合使用时的微妙之处。

首先通过一个题来引出这部分内容:

/*仅通过一行代码来使程序的最后输出为2018*/const int a = 2017;//此处填入一行代码cout << a << endl;

刚看到这里,可能会用疑惑,前面不是刚说了a是const int类型,值不能修改吗?
其实,还是因为我们的理解不深入,说的其实是不可以直接对const类型的值进行修改,但数据就在内存中放着,难道我们就只能眼睛看着,而没有任何办法吗?当然不是,此刻,神奇的指针又该出场了,通过指针间接修改a的值。我们可以通过指针找到变量a的内存空间,在内存中对a的值进行修改。

*((int *)&a) = 2018;,这样,就会在最终输出时输出2018。

因为上述代码用到了强制类型转化,所以在这里再说一下,C++是不允许将const类型转化为非const类型的,因为如果:

const int x = 10;
int *p = &x;

通过上面的讨论,我们已经知道到了x的值时const类型,不可被更改,然而将x的地址赋给p,却可以通过指针轻易的修改x的值,这就使得x的状态很荒谬。但要是必须这样做,只能通过强制类型转化来实现。

/*仅通过一行代码来使程序的最后输出为2018*/const int a = 2017;*((int *)&a) = 2018;  //此处填入一行代码cout << a << endl;

PS:如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Github的那点事儿

今天突然发现无法从本地git push到远程仓库了&#xff08;然而事实是网有点卡&#xff0c;github官网没更新过来&#xff0c;然而……ssh-key已经删了….&#xff09;&#xff0c;所以又重新添加ssh-key。 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub 将显示的内容粘贴到github…

C++学习笔记(三)

1. 引用变量 引用是已定义变量的别名&#xff0c;若使用int & x a;&#xff0c;即将x作为a的引用&#xff0c;其中的&不是地址运算符&#xff0c;而是类型标识符的一部分。事实上&#xff0c;x与a指向的是同一块内存空间&#xff0c;对x进行操作即对a进行操作。必须在…

Rabbits —— HDU-6227

题意&#xff1a; 有n只兔子在不同的位置&#xff0c;任意一只兔子可以跳到其余任两只兔子&#xff08;必须保证它们中间有空位&#xff09;中间&#xff0c;问最多可移动多少次&#xff1f; 思路&#xff1a; 可看作从任一侧的兔子向中间插空&#xff0c;因此可以将所有兔子…

uva 10570——Meeting with Aliens

题意&#xff1a;输入1-n的排列&#xff0c;每次可以交换两个整数。用最少的次数把排列变成1-n的环状序列。 思路&#xff1a;枚举贪心。依次枚举环上所有的点&#xff0c;正序一遍&#xff0c;倒序一遍&#xff0c;然后贪心求的所需的最小步数&#xff08;贪心策略是1与1号交换…

I/O复用之 epoll

epoll 系统调用 1. 内核事件表 epoll使用一系列函数来完成任务&#xff0c;把用户关心的文件描述符中的事件放到内核里的一个事件表中&#xff0c;因此不用像select、poll那样每次调用都要重复传入文件描述符集或事件表。epoll需要一个文件描述符来唯一标识该事件表&#xff0…

uva 1153—— Keep the Customer Satisfied

题意&#xff1a;有n个工作&#xff0c;已知每个工作的开始时间和结束时间&#xff0c;问最多能完成多少工作。 思路&#xff1a;贪心。要想使得最后的结果最佳&#xff0c;那么开始的晚的&#xff0c;要在最后来做。在此基础上&#xff0c;需要保证先做开始的早的&#xff08;…

I/O复用之 EPOLLONESHOT 事件

EPOLLONESHOT 事件 EPOLLONESHOT 事件 1. 使用EPOLLONESHOT的原因及优点2. recv返回值 及 与errno的配合使用3. 示例程序 1. 使用EPOLLONESHOT的原因及优点 即使使用ET模式&#xff0c;一个socket上的某个事件还是可能被触发多次。比如&#xff1a;一个线程在读取完某个sock…

uva 1612——Guess

题意&#xff1a;有n个选手参加比赛&#xff0c;比赛有3个题目&#xff0c;每个选手每个题目都有一个评测之前的于得分&#xff0c;当通过题目时才可以得到相应分数&#xff0c;否则为0&#xff0c;然后按照得分排名&#xff0c;id小的排在前面&#xff0c;现在给定选手的于得分…

uva 1611——Crane

题意&#xff1a;给定一个1-n的排序&#xff0c;每次可以选定一个偶数长的序列&#xff0c;然后交换前一部分和后一部分&#xff0c;使得最后的成为1-n的序列。求最后的次数和每次的策略。 思路&#xff1a;贪心。每次贪心的策略都是把i放到第i位置上&#xff0c;交换的时候找到…

【世界上最美丽的7张太阳照片】

【世界上最美丽的&#xff17;张太阳照片】 文章来源:http://ms.blogger.cn/peon/posts/1634.aspx转载于:https://www.cnblogs.com/paulzhu/archive/2004/02/24/1572.html

uva 11925——Generating Permutations

题意&#xff1a;给定一个1-n的排列&#xff0c;用不超过2*n2的操作把他变成升序。每次操作只有两种&#xff0c;一种是交换前两个元素&#xff0c;另外一种是把最后一个元素放到最后一位。 思路&#xff1a;贪心。用双端队列来保存数据&#xff0c;每次当v[0]>v[1]&&am…

二维map —— HDU1263

水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8752 Accepted Submission(s): 3482Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最…

uva 11491——Erasing and Winning

题意&#xff1a;给定一个n位的整数&#xff0c;要求从中去掉k位&#xff0c;使得剩下的数字最大。 思路&#xff1a;单调队列。在满足删除的数等于k 的前提下求一个不敌减的序列。 code&#xff1a; #include <iostream> #include <cstdio> #include <cmath>…

工作组和域的区别

局域网上的资源需要管理&#xff0c;“域”和“工作组”就是两种不同的网络资源管理模式。那么二者有何区别呢&#xff1f;看了这篇文章&#xff0c;您就会明白了。工作组 Work Group在一个网络内&#xff0c;可能有成百上千台电脑&#xff0c;如果这些电脑不进行分组&#xff…

uva 12545——Bits Equalizer

题意&#xff1a;给定两个等长的串s和t&#xff0c;其中s串包括0&#xff0c;1&#xff0c;&#xff1f;&#xff0c;T包含0&#xff0c;1&#xff0c;每次可以把s中的0变成1或者交换任意两个数或者&#xff1f;变成任意01.求由s到t的最小步数。 思路&#xff1a;杂。所有带&am…

Ananagrams Uva 156

Ananagrams (map的使用) Most crossword puzzle fans are used to anagrams–groups of words with the same letters in different orders–for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their…

流星

我的心情像下雨故乱飞溅 静落一地因为没有你 我的心情像流星划破天际 惨淡的光阴因为没有你 我的心情像风铃没有主见 无法成形因为没有你 我的心情像问号钩子心碎 一点茫然因为没有你 我的心情像冰块没有温度 化了一地因为没有你 我好想你我好想你我好想你 http://photo.…

uva 1623——Enter The Dragon

题意&#xff1a;有n个装满水的湖&#xff0c;可以预知将来m天下雨情况&#xff0c;每次下满一个湖&#xff0c;或者不下&#xff0c;不下雨的时候可以让某个湖变干&#xff0c;问是否存在一种方案使得每次下雨之前湖总是干的。 思路&#xff1a;贪心。什么时候下雨&#xff0c…

CodeForce 2A —— Winner

A. Winner The winner of the card game popular in Berland “Berlogging” is determined according to the following rules. If at the end of the game there is only one player with the maximum number of points, he is the winner. The situation becomes more diffi…

GARFIELD@12-30-2004

tele-murderer 转载于:https://www.cnblogs.com/rexhost/archive/2004/12/30/84230.html