习题解答
一、单项选择题
1. 若定义了intn=2,*p=&n,*q=p;则下面【】的赋值是非法的。
A. p=q B.*p=*q C.n=*q D.p=n
【答案】D
2. 若定义了double*p,a;则能通过scanf函数给输入项读入数据的程序段是【】。
A. p=&a;scanf(“%1e”,p); B.*p=&a;scanf(“%1f”,p);
C. p=&a;scanf(“%f”,p); D.p=&a;scanf(“%1f”,a);
【答案】C
3. 若定义了inta[10],i=3,*p;p=&a[5];下面不能表示为a数组元素的是【 】。
A. p[-5] B.a[i+5] C.*p++ D.a[i-5]
【答案】D
4. 若有如下定义:
intn[5]={1,2,3,4,5},*p=n;
则值为5的表达式是【 】。
A. *+5 B.*(p+5) C.*p+=4 D.p+4
【答案】C
5. 设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【 】。
A. b &ps B.b ps C.b *ps D.&b &ps
【答案】C
6. 设有以下定义和语句:
inta[3][2]={1,2,3,4,5,6},*p[3];
p[0]=a[1];
则*(p[0]+1)所代表的数组元素是【 】。
A. a[0][1] B.a[1][0] C.a[1][1] D.a[1][2]
【答案】C
7. 若定义了char*str=”Hello!”;下面程序段中正确的是【 】。
A. charc[],*p=c;strcpy(p,str);
B. charc[5],*p;strcpy(p=&c[1],&str[3]);
C. charc[5];strcpy(c,str);
D. charc[5];strcpy(p=c+2,str+3);
【答案】B
8. 若有下面的程序段,则不正确的fxy函数的首部是【 】。
main()
{inta[20],n;
…
fxy(n,&a[10]);
…
}
A. voidfxy(inti,intj) B.voidfxy(intx,int*y)
C.voidfxy(intm,intn[]) D.voidfxy(intp,intq[10])
【答案】A
9. 不合法的带参数main函数的首部形式是【 】。
A. main(intargc,char*argv) B.main(inti,char**j)
C. main(inta,char*b[]) D.main(intargc,char*argv[10])
【答案】A
10. 设有如下定义int(*pt)();则以下叙述中正确的是【 】。
A. pt是指向一维数组的指针变量
B. pt是指向整型数据的指针变量
C. pt是一个函数名,该函数的返回值是指向整型数据的指针
D. pt是指向函数的指针变量,该函数的返回值是整型数据
【答案】D
二、填空题
1. 请指出在int*p[3];定义中p是 【1】 。
在int(*q)();定义中q是 【2】 。
【答案】【1】整型指针数组;【2】指向返回值是整型的函数指针
2. 若有如下定义,则使指针p指向值为20的数组元素的表达式是p+ 。
inta[6]={1,5,10,15,20,25},*p=a;
【答案】4
3. 执行以下程序段后,x的值为 。
inta[3][2]={{1,2},{10,20},{15,30}};
i