2008年下半年软件考试因故推迟了,这未尝不是一件好事,对于那些准备还不够充分的考生来说,现在正是查漏补缺的好时机,本站为您整理了考前练习题,希望对您有所帮助,祝您考出好成绩!
1.阅读函数,写出函数的主要功能:
ch(int *p1,int *p2)
{ int p;
if(*pl>*p2) { p=* pl;*pl=*p2;* p2=p; }
}
【解】函数办有两个指针形参p1和p2,函数体通过*pl和*p2间接引用它们所指变量。当pl所指变量的位大于p2所指变量的值时,交换两形参所指变量的值。所以函数的功能当形参1所指变量比形参2所指变量的值大时,交换这两个变量的值。调用该函数能保证形参1所指变量的值不大于形参2所指变量的值。
2.若有下面的程序片段,则对数组元素的错误弓D用是( )
int a[12]={0},*p[3],* *pp,i;
for( i=0;i <3;i++) p=&a[i+4];
pp= P;
①pp[0][1]
②a[10]
③ p[3][l]
④*(*(p+2)+2)
3.若有如下定义和语句,则输出结果是( )
int * *pp, *p,a=10,b=20;
PP= &p; P=&a; P=&b; printf("%d%d\n",*p,* *PP);
①10, 20
② 10, 10
③ 20, 10
④ 20, 20
【解】上述代码定义变量a是有12个整型元素的数组,它的初值全是0。p是有三个元素的指针数组,每个指针能指向整型变量。哪是指针的指针,它能指向一个指向整型变量的指针, i是一个整型变量。执行代码for(i=0;i<3;i++) P=&a[i+4] 使指针数组 p的元素 p[0]指向 a[4] ,p[l]指向a[5] ,p[2]指向 a[6]。代码pp=p使指针变量pp指向p[0]。①代码pp[0][l] 用指针表达可等价地写成*(*pp+l)。其中*pp就是 p[0],p[0]的值是&a[4],*pp+1的值是&a[4]+1=&a[5],*(*pp+1)就是a[5]。②代码a[l0] 当然是引用数组a的元素。③代码p[3][1]数组p只有三个元素,没有p[3],所以是错误的。④代码*(*(p+2)+2)中的(p+2)是 &p[2],*(p+2)是 p[2],其值是&a[6],*(p+2)+2的值是&a[8],*(*(p+2)+2)引用的是a[8]。所以解答是@。 3COME文档编辑
【解】上述代码定义变量pp是指针的指针,它能指向一个指向整型变量的指针。定义变量p是指针,它能指向一个整型变量。a是一个整型变量,它有初值10。b也是一个整型变量,它有初值20。代码 pp=&p 使pp指向p,p=&a使p指向a,p=&b又使p指向b,不再指向a。所以。p是引用b,其值为20。* *pp是通过pp间接引用p,再通过p间接引用b,所以也是20。所以解答是④。
3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/