关于#c语言# 二维数组的问题,如何解决?


#include <stdio.h>
#include <string.h>
int main()
{
    char ch[2][5] = { "1981","0921" }, * 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 = 1; j <= 3; j += 2)

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

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


    return 0;
}

请教一下这道题目

这段代码的作用是读入两个字符串并将它们中奇数位上的数字提取出来并相加,最后输出结果。

具体实现过程如下:

  1. 声明了一个二维字符数组ch,并将它初始化为两个字符串;
  2. 声明了一个指针数组p,并将每一个元素指向对应的字符串;
  3. 两层循环,第一层遍历每一个字符串,第二层遍历该字符串的奇数位;
  4. 将奇数位上的数字提取出来,并相加,存入s中;
  5. 最后,输出s的值。

代码的输出结果为:30


s = 10 * s + p[i][j] - '0';//把数组p的第i行,从字符串的形式转为整型值的形式。

for (j = 1; j <= 3; j += 2)
看这里,双重循环的内层j只会取1和3两个值
原始数据"1981","0921" ,取出来不就是9191吗
s = 10 * s + p[i][j] - '0';这个代码就是把字符减去'0'变数字,然后拼进int里面,最终是个int型的9191
另,你自己既然有IDE可以进行验证,设个断点一步一步跟,看它到底是怎么执行的,不要靠猜