BCD B C CD
CD C D D
D D
【答案】D
【考点解析】字符指针p先指向s+1,通过四次循环使p分别指向s+1、s+2、s+3、s+4并输出。
【例13】(2001年4月)下列程序的输出结果是( )。
main()
{
char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
A. 非法 B. a[4]的地址 C. 5 D. 3
【答案】C
【考点解析】p是指向字符的指针并初始化为a[5]的地址。输出时先进行自减使p指向a[4]再输出a[4]中的内容。
【例14】(2001年4月)下列程序的运行结果是( )。
void fun(int *a, int *b)
{
int *k;
k=a; a=b; b=k;
}
main()
{
int a=3, b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d %d",a,b);
}
A. 6 3 B. 3 6 C. 编译出错 D. 0 0
【答案】B
【考点解析】main函数中定义了两个整型指针x、y分别指向变量a、b,将x、y作为实际参数调用fun,在fun里实现把x跟y的值调换,使得x指向b,y指向a,但是并没有改变a和b的值。
【例16】(2001年4月)假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROG ABCDEFGH IJKL<回车>,则输出结果为( )。
main( int argc,char *argv[ ])
{ while(--argc>0)printf("%s",argv[argc]);
printf("\n");
}
A. ABCDEFG B. IJHL
C. ABCDEFGHIJKL D. IJKLABCDEFGH
【答案】D
【考点解析】main函数的参数argc是命令行中参数的个数,*argv[ ]是一个指针数组指向命令行中的字符串首地址,题中argc=3通过循环先后输出argv[2]和argv[1]。
【例20】(2002年4月)若有定义:int aa[8];则以下表达式中不能代表数组元aa[1]的地址的是()。