练习7-1答案选择题
1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。 A.位与运算 B.逻辑与运算 C.取指针内容 D.取变量地址 2.已知:int a, x;,则正确的赋值语句是( C )。
A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a=\3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。
A.scanf(\.scanf(\C.printf(\D.scanf(\4.已知:char *p, *q;,选择正确的语句( C )。 A.p*=3; B.p/=q; C.p+=3; D.p+=q; 5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。 A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;
练习7-2答案
一、选择题
1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。 A.M个指向整型变量的指针
B.指向M个整型变量的函数指针
C.一个指向具有M列的二维数组的一行的指针 D.具有M个指针元素的一维数组的指针 2.已知:double *p[6];,它的含义是( C )。 A.p是指向double型变量的指针 B.p是double型数组 C.p是指针数组 D.p是数组指针
3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。 A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0]; 4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。 A.s[i+10] B.*(s+i) C.*(i+s) D.*((s++)+i) 5.已知:char b[5], *p=b;,则正确的赋值语句是( C )。 A.b=\ B.*b=\ C.p=\ D.*p=\6.下列对字符串的定义中,错误的是( A )。 A.char str[7]=\ B.char str[]=\C.char *str=\ D.char str[]={'F', 'O', 'R', 'T', 'R','A','N',0}; 7.已知:char s[20]=\,则不能引用字母o的表达式是( A )。 A.ps+2 B.s[2] C.ps[2] D.ps+=2,*ps 8.已知:char **s;,正确的语句是( B )。
A.s=\B.*s=\C.**s=\.*s='A';
9.已知:char c[8]=\,则下面的输出语句中,错误的是( B )。 A.printf(\ B.printf(\C.for (i=0; i<7; i++) D.for(i=0; i<7; i++) printf(\ printf(\10.已知:char *aa[2]={\,则以下说法正确的是( D )。
A.aa数组元素的值分别是\序列和\序列
B.aa是指针变量,它指向含有两个数组元素的字符型一维数组
C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址
11.已知:int a[3][4], *p=&a[0][0]; p+=6;,那么*p和( D )的值相同。
A.*(a+6) B.*(&a[0]+6) C.*a[1]+2 D.a[1][2] 12.已知:int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p=a;,则值为3的表达式是( A )。
A.p+=2, *(p++) B.p+=2, *++p C.p+=3, *p++ D.*(&a[0][0]+6) 13.已知:int **p;,则变量p是( B )。
A.指向int的指针 B.指向指针的指针 C.int型变量 D.以上三种说法均是错误的
14.已知:int a[]={1, 2, 3, 4}, y, *p=&a[1];,则执行语句y=(*--p)++;之后,变量y的
值为( A )。
A.1 B.2 C.3 D.4 15.已知:int b[]={1, 2, 3, 4}, y, *p=b;,则执行语句y=*p++;之后,变量y的值为( A )。
A.1 B.2 C.3 D.4 16.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则能够正确引用数组元素的表达式是( B )。
A.x B.*(ptr--) C.x[6] D.*(--ptr)
17.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则不能够正确引用数组元素的表达式是
( B )。
A.*(ptr--) B.*(--ptr) C.*(ptr++) D.*(++ptr) 18.若有以下语句且0<=k<6,则正确表示数组元素地址的表达式是( C )。
static int x[]={1, 3, 5, 7, 9, 11}, *ptr=x, k; A.x++ B.&ptr C.&ptr[k] D.&(x+1) 19.已知:int i, x[3][4];,则不能将x[1][1]的值赋给变量i的语句是( C )。
A.i=*(*(x+1)+1); B.i=x[1][1]; C.i=*(*(x+1)); D.i=*(x[1]+1); 20.已知:int a[2][3]={2, 4, 6, 8, 10, 12};,正确表示数组元素的地址是( A )。
A.*(a+1) B.*(a[1]+2) C.a[1]+3 D.a[0][0]
21.已知:int*p;,使用如下语句动态申请一个int型的存储单元,应当使用( D )。
p=( )malloc(sizeof(int)); A.int B.int * C.(* int) D.(int *) 二、填空题
22.阅读程序,下面程序的输出结果是( 15 )。
#include
{ static int a[2][3]={{1, 2, 3}, {4, 5, 6}}; int m, *ptr; ptr=&a[0][0];
m=(*ptr)*(*(ptr+2))*(*(ptr+4)); printf(\}
23.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出
该字符串.则①是( '\\0' 或 0 )、②是( ++ )。 main()
{ char str[81], *sptr; int i;
for (i=0; i<80; i++) { str[i]=getchar();
if (str[i]=='\\n') break; }
str[i]= ① ; sptr=str;
while (*sptr) putchar(*sptr ② ); }