标题:这两行代码有什么区别?
只看楼主
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
结帖率:90.32%
已结贴  问题点数:20 回复次数:9 
这两行代码有什么区别?
这是一个字符串比较函数,第二份代码即使给两个形参赋予相同的字符串"abc",但比较结果却不相同。原因出现在下面这两行语句中。
其中for(;*s1&&*s2&&*s1==*s2;s1++,s2++)与for(;*s1,*s2,*s1==*s2;s1++,s2++)这两行代码有什么区别?
第一份代码如下:
程序代码:
int function(char *s1,char *s2){
    for(;*s1&&*s2&&*s1==*s2;s1++,s2++)
    ;
    printf("%c  %c\n",*s1,*s2);
    return *s1==*s2 ? 0 : *s1>*s2 ? 1 : -1;
}

第二份代码如下:
程序代码:
int function(char *s1,char *s2){
    for(;*s1,*s2,*s1==*s2;s1++,s2++)
    ;
    printf("%c  %c\n",*s1,*s2);
    return *s1==*s2 ? 0 : *s1>*s2 ? 1 : -1;
}

搜索更多相关主题的帖子: 区别 char 两行 for 代码 
2020-02-25 22:23
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:10 
你看看余额,要是有钱就给我拿一万。   这是第一份
你看看余额,然后给我拿一万。   这是第二份

逻辑与或具有短路效应。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-02-25 23:05
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
得分:0 
以下是引用forever74在2020-2-25 23:05:47的发言:

你看看余额,要是有钱就给我拿一万。   这是第一份
你看看余额,然后给我拿一万。   这是第二份

逻辑与或具有短路效应。

你说的太高深了,看不明白,对于第二份代码,我将两个形参都赋予字符串"abc",但printf语句却打印*s1的值为空,*s2的值为字符'a'.
为什么不是都为字符'a'?
2020-02-25 23:33
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:10 
*s1&&*s2&&*s1==*s2  : 先判断*s1是否为0,如果为0则表达式为假,如果为真则继续判断。然后判断*S2是否为0,如果为0则表达式为假,如果为真则继续判断。然后判断*s1与*s2是否相等,如果相等,则整个表达式是为真。
2020-02-25 23:52
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
*s1,*s2,*s1==*s2    :*s1,*s2这两个表达式实际没什么作用,真正起作用的是*s1==*s2,判断*S1和*S2是否相等,如果不相等则整个表达式的值为假。
PS:自己百度了解一下逗号运算符的规则。
2020-02-25 23:54
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
至于你说的第二份代码打印的问题,因为发生越界了,所以打印的操作对于程序逻辑是无效的。
2020-02-26 00:02
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
得分:0 
以下是引用八画小子在2020-2-26 00:02:02的发言:

至于你说的第二份代码打印的问题,因为发生越界了,所以打印的操作对于程序逻辑是无效的。

对于第二份代码,假如我输入的形参为字符串"abc",那么函数除了依次比较字符'a','b''c'外,那么空字符'\0'有没有参与比较?
是不是当字符的值为空字符'\0'时才触发越界?还是说空字符'\0'的下一个位置才触发越界?
2020-02-26 00:44
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
有有有
2020-02-26 01:34
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
以下是引用b1592187525在2020-2-26 00:44:01的发言:


对于第二份代码,假如我输入的形参为字符串"abc",那么函数除了依次比较字符'a','b''c'外,那么空字符'\0'有没有参与比较?
是不是当字符的值为空字符'\0'时才触发越界?还是说空字符'\0'的下一个位置才触发越界?

对于第一个问号,空字符有参与。
对于第二个问题,并不是只有空字符的时候才发生越界。只要访问了不属于自己的内存空间就术语越界,通常是遍历数组的时候发生,主要是因为设置的停止条件有问题。。
2020-02-26 01:36
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
要是有还问题,加我QQ896057905
2020-02-26 01:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499398-1-1.html




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

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