可以解释一下吗 歇歇

下程序的输出结果是 

 

int main() 

 

{

 

char ch[2][5]={"6937","8254"},*p[2]; 

 

int i,j,s=0; 

 

for(i=0;i<2;i++) p[i]=ch[i]; 

 

for(i=0;i<2;i++) 

 

    for(j=0;p[i][j]>'\0' && p[i][j]<='9';j+=2) 

 

         s=10 * s+p[i][j]- '0'; 

 

pritnf("%d\n",s); 

 

}

答案为6385哦~

首先第一个for循环目的是为了将ch数组中的数全部复制给了p数组。

后面的双重循环中,内循环只有在第p[i][j]为数字且不等于‘\0’时才继续循环。当i为0,判断p[i][j]的值是否为数字,若为数字就将这个数字放进s中。内循环的步进为2,因此走完'6'后就直接跳一个,开始判断‘3’了

两个字符串转换为数字,输出:6385

int main()
{
    char ch[2][5]={"6937","8254"},*p[2];
    int i,j,s=0;
    for(i=0;i<2;i++) p[i]=ch[i];//将ch[i]每行首地址,赋值指针数组p
    for(i=0;i<2;i++)
        for(j=0;p[i][j]>'\0' && p[i][j]<='9';j+=2)//"6937" ==> 6 3 ,"8254" ==>8 5
            s=10 * s+p[i][j]- '0'; //将字符转换为数字,得到4位数的整数
    printf("%d\n",s); //输出4位数:6385
    
    return 0;
}