这段代码怎么分析呀?


#include <stdio.h>
main()
{
    char*s="01234";
    while(*(++s)!='\0')
    {
        switch(*s-'0')//字符"0"不参与 
        {
            case 0:
                case 1:putchar(*s+1);break;
                case 2:putchar(*s+1);break;
                case 3:putchar(*s+1);//"3",对应此处,输出2次4 
                default:putchar(*s+1);break;//"4",对应此处,输出5 
        }
    }
}
//输出结果为 23445 

正确的输出应该是123445哈

  1. 明确switch中的case语句如果没有break会继续向下执行,比如,这里面case 3中没有break语句,则会把default中的语句继续执行下去

  2. while循环就是遍历s这个字符串,每一个字符减去‘0’,得到的就是和‘0’的差,刚好就是数字0、1、2

  3. 循环一开始,s指向字符串的第一个字符,*s='0' s-'0' = 0, 执行case 0语句,这个语句没有break,所以执行case 1,输出s + 1 = 1

  4. 剩下的以此类推



    while(*(++s)!='\0')

会不会是这里,++s 直接指向了下一个字符,跳过了0呀