| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 777 人关注过本帖
标题:来来来,大家来理解下这三行代码
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
 问题点数:0 回复次数:4 
来来来,大家来理解下这三行代码
程序实现一个strcmp函数。

int i = 0;
while(*(p1 + i) == *( p2 + i))
if (*(p1 + i++) == '\0' ) return 0;
return *(p1 + i) - *(p2 + i);

我是这么理解的。因为p1和p2首地址值相等, 他们的首地址就相等了。

if语句中*(p1 + i++) 就是p1 指向他下一个地址值, p2也指向他下一个地址值。当比较到最后都没结束循环就说明
p1 和 p2 指向同一块地址单元。

下面就是当两个地址值不同就比较其ascll码值,并结束循环。

我想问的是, while控制if语句下的两个return只算一条语句吗?

就像while()    if else if else   算一条语句。还有就是帮我看看我的理解有没有问题
搜索更多相关主题的帖子: return 
2017-04-02 16:07
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
以下是引用Emotiona在2017-4-2 16:07:03的发言:

程序实现一个strcmp函数。

int i = 0;
while(*(p1 + i) == *( p2 + i))
if (*(p1 + i++) == '\0' ) return 0;
return *(p1 + i) - *(p2 + i);

我是这么理解的。因为p1和p2首地址值相等, 他们的首地址就相等了。

if语句中*(p1 + i++) 就是p1 指向他下一个地址值, p2也指向他下一个地址值。当比较到最后都没结束循环就说明
p1 和 p2 指向同一块地址单元。

下面就是当两个地址值不同就比较其ascll码值,并结束循环。

我想问的是, while控制if语句下的两个return只算一条语句吗?

就像while()    if else if else   算一条语句。还有就是帮我看看我的理解有没有问题

p1和p2是指针,地址值有可能是相等。p1和p2是数组首地址就不可能相等。
看似是字符串比较,两串相等时 *(p1 + i++)失效,试改为 *(p1 + ++i) 。
或:
while(*(p1+i)==*(p2+i) && *(p1 + ++i)!='\0') NULL;


[此贴子已经被作者于2017-4-2 22:43编辑过]

2017-04-02 22:40
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
代码没问题。
while(*(p1 + i) == *( p2 + i))是说以p1、p2为头的两个字符串的字符一个个比较,相等则循环继续。
if (*(p1 + i++) == '\0' ) return 0; 这是循环内执行的语句,相当于如下语句:
{
    if (*(p1 + i) == '\0' )return 0;
    i++;
}
意思是如果判断到字符串尾则说明这两个字符串完全相等,返回0;不管是否相等,指向下一个要判断的字符。
这一句改成if (*(p1 + ++i) == '\0' ) return 0;是不行的。同时while(*(p1+i)==*(p2+i) && *(p1 + ++i)!='\0')也不行,会出现系列点问题(在不同编译器下可能有不同结果)。
等效代码如下:
int i=0;
while(p1[i]==p2[i]&&p1[i])i++;
return p1[i]-p2[i];
2017-04-03 08:09
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
去掉这个 i 好了,少点麻烦。
2017-04-03 11:49
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 xzlxzlxzl
谢谢大神,分析得很详细。
2017-04-03 12:15
快速回复:来来来,大家来理解下这三行代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014847 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved