*pch[2]; 是指针数组,有2个指针。
for(i=0;i<2;i++) pch[i]=ch[i];
让指针 pch[0] 指向ch[0], 也就是指向 "2013",
pch[0][0] 就是 ch[0][0], 字符'2', pch[0][1] 就是 ch[0][1], 字符'0',
pch[0][2] 就是 ch[0][2], 字符'1', pch[0][3] 就是 ch[0][3], 字符'3',
让指针 pch[1] 指向ch[1], 也就是指向 "0246"
pch[1][0] 就是 ch[1][0], 字符'0', pch[1][1] 就是 ch[0][1], 字符'2',
pch[1][2] 就是 ch[1][2], 字符'4', pch[1][3] 就是 ch[0][3], 字符'6',
for(i=0;i<2;i++) // i=0, 处理 "2013" 这行,i=1, 处理 "0246" 这行
for(j=0;pch[i][j]>='0'&&pch[i][j]<='9';j+=2) 是对 i 行中 第 j 个字符 作 处理
j 从0起,步长 j+=2,也就是 处理 j=0,j=2,j=4....
循环 是否结束 的 判断 条件 是
pch[i][j]>='0'&&pch[i][j]<='9' -- 第 j 个字符 是数字 0到9 则循环,不是数字循环就结束,显然,j=4的时候超出字符串长度,不是数字 0到9了。所以只循环 j=0,j=2.
s=10*s+pch[i][j]-'0';
pch[i][j]-'0' 是把pch[i][j]字符值 ‘0' 换算成 算术值 0,’1‘换算成 算术值1,’2‘换算成 算术值2,
....’9‘换算成 算术值9
循环顺序:
i=0; j=0, 处理 "2013" 中 的2, i=0;j=2, 处理 "2013" 中的 1
i=1;j=0, 处理 "0246" 中的 0,i=1,j=1, 处理 “0246” 中 的 4
s=0;
s = 10*s + 2 得2
s= 10*s + 1 = 10*2 + 1 =21
s = 10*s + 0 = 10*21 + 0 = 210
s = 10*s + 4 = 10*210+4 = 2104
cout<<s<<endl;
输出
2
21
210
2104
追问ch是一个2行6列的数组,不应该是
201300
024600
吗?
那为什么还说j=4时超出字符串长度呢?
追答2013\0 不是201300。"2013" 尾部是字符串结束符,不是00。
0246\0 也不是 024600。道理一样。
字符串长度只算到 结束符 以前。所以 j=4 超出字符串长度。
(没说的超出2行6列的数组的数组存储单元)。