第八章 指针
一、选择题
1.变量的指针,其含义是指该变量的 B 。(0级)
A)值 B)地址 C)名 D)一个标志 2.设有说明 int (﹡ptr)[M];其中ptr是 C 。(0级)
A) M个指向整型变量的指针
B) 指向M个整型变量的函数指针
C) 一个指向具有M 个整型元素的一维数组的指针
D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量 3.选择出 i的正确结果 B 。(1级)
int i; char ﹡s=〞a\\045+045\\ˊb〞; for ( i=0;s++;i++); A)5 B)8 C)11 D)12 4.如下程序的执行结果是 C 。(1级) # include
main( ) {int i; char ﹡s=〞a\\\\\\\\\\n 〞; for( i=0; s[i]!=?\\0?;i++) printf(〞%c 〞,﹡(s+i)); }
A)a B)a\\ C)a\\\\ D)a\\\\\\\\ 5.如下程序的执行结果是 B 。(2级) # include
main() { static int a[ ]={1,2,3,4,5,6}; int ﹡p; p=a;
﹡(p+3)+=2; printf(〞%d,%d\\n 〞,﹡p,﹡(p+3)); }
A)1,3 B)1,6 C)3,6 D)1,4 6.如下程序的执行结果是 C 。(2级) # include
main( ) { static int a[ ][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (﹡p)[4], i=1,j=2; p=a;
printf(〞%d \\n 〞, ﹡(﹡(p+i)+j)); }
A)9 B)11 C)13 D)17
7.若有以下定义,则对a数组元素的正确引用是 D 。(1级) int a[5], ﹡p=a;
A)﹡&a[5] B)a+2 C)﹡(p+5) D)﹡(a+2)
8.若有以下定义,则对a数组元素地址的正确引用是 D 。(1级)
int a[5], ﹡p=a;
A)p+5 B)﹡a+1 C)&a+1 D)&a[0]
9.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为 A 。(1级)
A)﹡(﹡(a +i) +j ) B)(a+i) [j] C)﹡(a+i+j) D)﹡(a +i)+j
10.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为 D 。(1级)
A)﹡(a [i] +j ) B)(a+i) C)﹡(a+j) D)a[i]+j 11.设有下面的程序段: char s[ ]= 〞china 〞; char ﹡p; p=s;
则下列叙述正确的是 D 。(0级)
A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等 D)﹡p与s[0]相等
12.若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是 C 。(1级)
A)strcpy(s1, 〞string2 〞); B)strcpy(s4, 〞string1 〞); C)strcpy(s3, 〞string1 〞); D)strcpy(s1, s2);
13.若有定义:int a[5];则a数组中首元素的地址可以表示为 C 。(1级)
A)&a B)a+1 C)a D)&a[1] 14.以下与int ﹡q[5];等价的定义语句是 C 。(1级)
A)int q[5] B)int ﹡q C)int ﹡(q[5]); D)int (﹡q)[5];
15.若有以下定义,则﹡(p+5)表示 B 。(1级)
A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值
16.若有定义:int ﹡p[4];则标识符p B 。(0级)
A)是一个指向整型变量的指针 B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组 D)说明不合法
17.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。(1级)
A)a,point,*&a B) &*a,&a,*point C)*&point,*point,&a D) &a,&*point,point 18.若有说明:int *p,m=5,n;以下正确的程序段是 D 。(1级)
A)p=&n; scanf(“%d”,&p); B) p=&n; scanf(“%d”,*p); C) scanf(“%d”,&n); *p=n; D) p=&n; *p=m; 19.下面程序段的运行结果是 B 。(1级)
char str[ ]=“ABC”,*p=str; printf(“%s\\n”,*(p+1));
A) 66 B) BC C)字符?B?的地址 D)字符?B?20.已有定义int k=2,
*ptr1,*ptr2;且ptr1和ptr2均已指向同一个变量k,下面不正确执行的赋值语句是: B 。(1级)
A) k=*ptr1+*ptr2 ; B) ptr2=k; C) ptr1=ptr2; D)k=*ptr1*(*ptr2); 21.有以下程序 main()
{ char a,b,c,*d; a='\\'; b='\\xbc';
c='\\0xab'; d=\
printf(\}
编译时出现错误,以下叙述中正确的是 D 。(1级) A)程序中只有a='\\';语句不正确。 B)b='\\xbc';语句不正确。
C)d=\语句不正确。
D)a='\\';和 c='\\0xab';语句都不正确。 22.若有一些定义和语句 #include
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是 C 。(1级) A) *q=0; B) w=p; C) *p=&a; D) *p=*w; 23.有以下程序
int *f(int *x,int *y) { if(*x<*y) return x; else return y; }
main()
{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);
printf(\}
执行后输出结果是 B 。(2级)
A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8 24.有以下程序 main()
{ char *s[]={\p=s[1];
printf(\}
执行后输出结果是 C 。(1级)
A) n,two B) t,one C) w,one D) o,two 25.有以下程序 main()
{ int x[8]={8,7,6,5,0,0},*s; s=x+3;
printf(\}
执行后输出结果是 B 。(1级)
A) 随机值 B) 0 C) 5 D) 6 26.有以下程序 main()
{ char str[]=\while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);}
执行后输出结果是 C 。(1级)
A) yz<回车>xyz B) z<回车>yz
C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz 27.有以下程序 main()
{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1;
printf(\}
执行后输出结果是 A 。(2级)
A) 7 B) 6 C) 8 D) 无确定值 28.有以下程序
void fun(int *a,int i,int j) { int t; if (i { t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main() { int a[]={1,2,3,4,5,6},i; fun(a,0,5); for(i=0;i<6;i++) printf(\} 执行后输出结果是 A 。(2级) A) 6 5 4 3 2 1 B) 4 3 2 1 5 6 C) 4 5 6 1 2 3 D) 1 2 3 4 5 6 29.有以下程序 main(int argc,char *argv[]) { int n,i=0; while(argv[1][i]!='\\0') { n=fun(); i++;} printf(\} int fun() { static int s=0; s+=1; return s; } 假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令 exam 123〈回车〉 则运行结果为 A 。(2级) A) 6 B) 8 C) 3 D) 4 30.有如下程序段 int *p,a=10,b=1 p=&a; a=*p+b; 执行该程序段后,a的值为 B 。(1级) A) 12 B) 11 C) 10 D) 编译出错 31.对于基类型相同的两个指针变量之间,不能进行的运算是 C 。(0级) A)< B) = C) + D) – 32.以下函数返回a所指数组中最小的值所在的下标值。 fun(int *a, int n) { int i,j=0,p; p=j; for(i=j;i A) i=p B) a[p]=a[i] C) p=j 33.有如下说明 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 B 。(1级) A) *p+9 B) *(p+8) C) *p+=9 34.有如下程序 main() { char s[]=”ABCD”, *P; for(p=s+l;p;p++) printf(“%s\\n”,*p); } 该程序的输出结果是 D 。(2级) A) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D 35.有如下程序 main() { char ch[2][5]={“6937”,”8254”},*p[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>?\\0?;j+=2) s=10*s+p[i][j]-?0?; printf(“%d\\n”,s); } 该程序的输出结果是 C 。(2级) A) 69825 B) 63825 C) 6385 36.执行以下程序后,a的值为 C 。(1级) D) p=i D) p+8 D) 693825