c语言等级考试代码求教
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]>′′;j+=2)
s=10*s+p[i][j]-′0′;
printf("%dn",s);}
这个输出的结果为什么是6385???求高手解释下不胜感激
[解决办法]
int main( void)
{
char ch[2][5]={"6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];//p[0]指向“6937”,p[1]指向“8254”
for(i=0;i<2;i++)
{
for(j=0;p[i][j]>' ';j+=2)
{
s=10*s+p[i][j]-'0';//将上一个数值乘以10再加上本次取得的数值(p[i][j]-'0'是将字符转换成数字)
printf("%d\n",s);
}
}
printf("%d\n",s);
}
[解决办法]
{ char ch[2][5]={"6937","8254"},*p[2];
这句定义了一个二维字符数组,里面有两个以为字符数组,每个长度都是5,第一个(ch[0])里面的值为'6937',第二个(ch[1])里面的值为'8254'。然后定义了一个字符指针数组。
for(i=0;i<2;i++)p[i]=ch[i];
这里是对p[0]和p[1]进行初始化,使p[0]指向第一个字符串。p[1]指向第二个字符串。就是说*p[1]='6',*p[2]='8'。
for(j=0;p[i][j]>′′;j+=2)
s=10*s+p[i][j]-′0′;
这里其实是把char转化为int了。是转化两个里面的,而且不是顺序转化,是隔一个转化一个。p[i][j]里面其实存储的是那个数字的ASCII码。0-9的ASCII码是顺序排列的。所以每个数字的ASCII码减去0的ASCII码就是它的整形值,然后如果后面还有,就把前面得到的乘以10,再加后面的,因为是隔一个提取,所以左后的结果是整形6385