分享
 
 
 

对后缀自增自减的误解

王朝other·作者佚名  2007-05-23
窄屏简体版  字體: |||超大  

对自增自减的后缀式,一般解释是:先使用再自增自减,其实这是一个错误的理解,有时候可能造成令人难以理解的错误.

自增自减的后缀形式仍然是先自增,再使用.只不过其原值以临时对象的形式返回了而已.

关于自增自减的详细论述请见我的另一篇文章(http://blog.csdn.net/islwj/archive/2006/10/19/1340371.aspx)

请看下面的例子:

#include <iostream>

using std::cout;

using std::endl;

const char *st = "c++";

void c_char()

{

int len = 0;

while(*st++)

++len;

st = st - len;

cout << len << ":" << st << endl;

}

st在内存中的分配大概是这样子的(为了分析方便,地址编址从0开始):

地址: 0 1 2 3 4 5

-------------------------

C + + 0

程序的执行结果可能令你吃惊(如果你认为后缀式自增是先使用再自增的话).

const char *st = "c++"

这一句令 st 指向字符串在内存中的首地址(废话一下:B),在这个例子中是指向地址为0的地方.接下来我们来分析while循环的执行情况:

一. 我们来分析如果是先使用再自增程序执行结果应该是怎样的:

如果 st 令 while的条件式 为真的话,那么 st 自增, len = len + 1, 否则退出while循环.

步骤 old_st while条件 st len

-----------------------------------------------

1 0 真 1 1

2 1 真 2 2

3 2 真 3 3

4 0 假

执行到第4步的时候,while条件为假,所以退出while循环, len = 3, st应该是指在地址为 3 的地方.

所以 st = st - len -> st = 3 - 3 -> st = 0. 故程序的输出应该是

3:c++

可是如果你有执行上面的程序的话,你就会发现,情况并不是这样的!那到底是哪里出错了呢?就是后缀式自增是先使用再自增这个基本假设是错的!

二. 我们再来分析一下自增是先自增再使用的情况会是怎样:

st 先自增,并返回原值,如果 原值 令 while的条件式 为真的话, len = len + 1,否则退出while循环.

步骤 st old_st while条件 len

-----------------------------------------------

1 1 0 真 1

2 2 1 真 2

3 3 2 真 3

4 4 3 假 3

执行到第4步的时候,while条件为假,所以退出while循环.此时, st 指向地址为 4 的地方,即已经逾过了字符串的尾(pass-the-end),如果有接触过STL,对逾尾指针这个概念应该是很熟悉的:B

所以 st = st - len -> st = 4 - 3 -> st = 1

故程序的输出应该是: 3:++

不过这应该不是我们想要的结果:B

想正确输出字符串,程序应该改为: st = st - len - 1;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有