可以分析一下下面代码答案0008是怎么得到的吗?


#include <stdio.h>
int main()
{
    char *p="12134221";
    int z[4]={0,0,0,0},j,i;
    for(j=0;p[j];j++)
    {switch(p[j])
    {
        case'1':i=0;
        case'2':i=1;
        case'3':i=2;
        case'4':i=3;
    }
    z[i]++;
    }
    for(j=0;j<4;j++)
    printf("%d",z[j]);
    return 0;
}









1.char *p="12134221"; 这里定义了字符串 p 长度为8
2.for(j=0;p[j];j++) 这个for()循环共8次
3.switch(p[j])
{
case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;
}
由于每个case : 后面没有break,所以不管switch(p[j]) 是什么,都会执行到 case '4': i=3; 所以z[i]++ == > z[3] ++ , z[3] 连加 8次 ,数组z[0] z[1] z[2] 均为0.
p[0]=1,i=3
p[1]=2,i=3
p[2]=1,i=3
p[3]=3,i=3
p[4]=4,i=3
p[5]=2,i=3
p[6]=2,i=3
p[7]=1,i=3

4.所以最后for(j=0;j<4;j++)
printf("%d",z[j]);
输出:0008