有如下程序: #include<iostream.h> void main( ) { char ch[2] [5] ={"6937","8254"},* p[2] ; int i,j,s=0; for(i=0;i<2;

admin2010-12-16  29

问题 有如下程序:    #include<iostream.h>    void main( )    {  char ch[2] [5] ={"6937","8254"},* p[2] ;    int i,j,s=0;       for(i=0;i<2;i++) p =ch ;       for(i=0;i<2;i++)       for(j=0;p [j] >’\0’;j+=2)    s=10 * s+p [j] -’0’;       cout < < s;}    该程序的输出结果是

选项 A、69825
B、63825
C、6385
D、693825

答案C

解析 该题主要搞清楚以下几点:①定义了一个指针数组char * P[2] 后,程序中第一个循环for(i=0;i<2;i++) p =ch ;的作用是使指针数组的p[0] 元素(它本身是一个指针) 指向了二维数组ch的第一行字符串,并使指针数组的p[1] 元素指向了二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch [j] 或p [j] 。②对二维数组ch的初始化,使其第一行ch[0] 中存入了字符串“6937”,第二行ch[1] 中的内容为字符串“8254”。③程序中第二个循环中的循环体s=s * 10+p [j] -’0’;的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0) ,再将当前P [j] 中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件 p [j] >’\0’是指p [j] 中的字符只要不是字符串结束标志’\0’就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p 所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从 P[0] 所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和“3”,然后从p[1] 所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。
转载请注明原文地址:https://kaotiyun.com/show/mLVp777K
0

最新回复(0)