【例2】(2000年4月)下列程序执行后的输出结果是( )。
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=0; i<9; i++)p[i]=i+1;
printf("%d\n",a[1][2]);
}
A. 3 B. 6 C. 9 D. 随机数
【答案】B
【考点解析】a[1][2]是数组a的第2行第3个元素,即p[5]=6。
【例6】(2000年4月)设已有定义: char *st="how are you";,下列程序段中正确的是( )。
A. char a[11],*p; strcpy(p=a+1,&st[4]);
B. char a[11]; strcpy(++a, st);
C. char a[11]; strcpy(a, st);
D. char a[ ],*p;strcpy(p=&a[1],st+2);
【答案】A
【考点解析】A选项是把st所指向的字符串的第五个字符开始以后的字符串赋值给数组a第二个元素开始后面的元素;B选项中数组名是地址常量,不能进行自加;C选项形式是正确但st所指字符串有12个字符,a数组只有11个元素,不能进行赋值;D选项数组a没有指定长度。
【例7】(2000年4月)假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>后,程序的输出结果是( )。
main(int argc, char *argv[ ])
{ int i;
if(argc<=0)return;
for(i=1;i
}
A. hello good B. hg
C. hel D. hellogood
【答案】B
【考点解析】main函数第一个参数argc是指命令行中的参数个数,argv是一个指向字符串的字符数组,数组里的元素指向命令行中的字符串。题中,命令行有三个字符串所以argc值为3,输出的是第二个字符串和第三个字符串的第一个字母。
【例8】(2000年9月)有如下程序段
int *p,a=10,b=1;
p=&a; a=*p+b;
执行该程序段后,a的值为( )。
A. 12 B. 11
C. 10 D. 编译出错
【答案】B
【考点解析】题中a把地址赋值给指针变量p,*p就是a的内容,所以a=10+1=11。
【例9】(2000年9月)以下函数返回a所指数组中最小的值所在的下标值
fun(int *a, int n)
{ int i,j=0,p;
p=j;
for(i=j;i
if(a[i]
return(p);
}
在下划线处应填入的是( )。
A. i=p B. a[p]=a[i]
C. p=j D. p=i
【答案】D
【考点解析】首先让p=0设第一个元素最小,通过循环使数组的每个元素都与当前最小元素a[p]比较,如果a[i]
【例11】(2000年9月)有如下程序
main()
{ char s[ ]="ABCD", *p;
for(p=s+1; p
}
该程序的输出结果是( )。
A. ABCD B. A C. B D. BCD