首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针:为什么输出是6?

指针:为什么输出是6?
EN

Stack Overflow用户
提问于 2013-09-17 21:26:16
回答 3查看 129关注 0票数 0

下面程序的输出是6。我不知道为什么。当我手绘它的时候,我得到了5

代码语言:javascript
复制
#include<stdio.h>
#include<conio.h>

main()
{
    int i,count=0; 
    char *p1="abcdefghij"; 
    char *p2="alcmenfoip"; 

    for(i=0;i<=strlen(p1);i++) { 
        if(*p1++ == *p2++) 
            count+=5; 
        else 
            count-=3; 
    } 
    printf("count=%d",count); 
}
EN

回答 3

Stack Overflow用户

发布于 2013-09-17 21:37:16

if(*p1++ == *p2++)正在逐个字符读取p1p2。当字符相同时,它会将count增加5,否则会减少3。但是,还有一件事你没有注意到:strlen(p1)在每次迭代中总是不同的,因为p1会改变。因此,在每次迭代中,您还需要检查它的值。

代码语言:javascript
复制
p1   p2 count   i   strlen (before entering into the loop body)
a    a   5      0   10
b    l   2      1   9
c    c   7      2   8
d    m   4      3   7
e    e   9      4   6
f    n   6      5   5  <- No more - this is the last one
票数 9
EN

Stack Overflow用户

发布于 2013-09-17 21:37:18

这里的诀窍是,strlen(p1)在每次迭代中都会发生变化。所以循环条件是

代码语言:javascript
复制
0 <= 10  +5
1 <= 9   -3
2 <= 8   +5 
3 <= 7   -3
4 <= 6   +5
5 <= 5   -3

因此相等的字符是ace,如上面的+5所示。总数是6。

票数 2
EN

Stack Overflow用户

发布于 2013-09-17 21:37:07

您的程序在i>strlen(p1)时停止,因为您每次执行*p1++时都会更改p1。

在计算条件时,strlen返回来自las char的大小。

如果你在开始时(在你的循环之前)把这个值存储在一个变量中,它应该可以工作。

不管怎样,尽量避免指针算法...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18851157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档