当前位置:文档之家› 第十章 指针(含答案)

第十章 指针(含答案)

第十章指针一、选择题1.以下程序的运行结果是【C】。

sub(int x,int y,int *z){*z=y-x ;}main(){ int a, b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(”%4d,%4d,%4d\n”,a,b,c);}A. 5,2,3 B. -5,-12,-7 C.-5,-12,-17 D. 5,-2,-72.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是【 B 】A)s+1 B)s++ C)&s[0]+1 D)&s[1]3.下列程序能对两个整型变量的值进行交换。

以下正确的说法是【 D】。

main(){ int a=10,b=20;printf("(1)a=%d,b=%d\n",a,b);swap(&a,&b);printf(“(2)a=%d,b=%d\n”a,b);}swap(int p, int q){ int t; t=p;p=q;q=t;}A. 该程序完全正确B. 该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可C. 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可D. 以上说法都不正确4.有四组对指针变量进行操作的语句,以下判断正确的选项是【】。

(1)int *p,*q; q=p;int a,*p,*q;p=q=&a;(2)int a,*p,*q; q=&a; p=*q;int a=20, *p; *p=a;(3)int a=b=0,* p; p=&a; b=* p;int a=20,*p,*q=&a; *p=*q;(4)int a=20,*p,*q=&a; p=q;int p, *q; q=&p;A.正确:(1);不正确:(2),(3),(4)B.正确:(l),(4);不正确:(2),(3)C.正确:(3);不正确:(1),(2),(4)D.以上结论都不正确5.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是【】。

main(){ int a,b,*p=&a,*q ;printf(“input a;”); scanf(“%d”,*p);……}A.*p表示的是指针变量 p的地址B.*p表示的是变量 a的值,而不是变量 a的地址C.*p表示的是指针变量p的值D.*p只能用来说明p是一个指针变量6.以下程序有错,错误原因是【】。

main(){ int *p,i;char *q,ch;p=&i; q=&ch; *p= 40;*p=*q;……}A.p和q的类型不一致,不能执行*p=*q语句B.*p中存放的是地址值,因此不能执行*p=40;语句C.q没有指向具体的存储单元.所以*q没有实际意义D.q虽指向具体的存储单元,但该单元中没有确定的值,故不能执行*p=*q; 语句7.已有定义 int k=2; int *ptrl, *ptr2;且 ptrl和 ptr2均已指向变量 k,下面不能正确执行的赋值语句是【】。

A. k=*ptr1+*ptr2;B. ptr2=k;C. ptrl=ptr2;D. k=*ptrl*(*ptr2);8.变量的指针,其含义是指该变量的【】。

A. 值B. 地址C. 名D. 一个标志9.下面判断正确的是【】。

A. char * a="China"; 等价于char *a;* a="china";B. char str[10]={"China"};等价于 char str[10]; str[ ]={"China"};C. char *s="China";等价于 char * s; s="china";D. char c[4]="abc", d[4]="abc"; 等价于 char c[4]=d[4]="abc";10.设有说明语句:char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是【】。

A. 9B. 5C. 6D. 711.下面能正确进行字符串赋值操作的是【】。

A. char s[5]={"ABCDE"};B. char s[5]={’A’,’B’,’C’,’D’,’E’};C. char *s; s="ABCDE";D. char * s; scanf ("%s",s) ;12.下面程序段的运行结果是【】。

char *s= “abcde”;s+=2; printf(”%d”,s);A. cdeB. 字符’c’C. 字符‘c’的地址D. 无确定的输出结果13.设有下面的程序段;char s[ ]="China"; char *p; p=s;则下列叙述正确的是【】。

A. s和p完全相同B. 数组s中的内容和指针变量p中的内容相等C. s数组长度和P所指向的字符串长度相等D. *p与s[0]相等14.下面程序段正确的是【】。

A. char str[20]; scanf("%s",&str) ;B. char *p; scanf("%s", p) ;C. char str[20]; scanf("%s",&str[2]);D. char str[20],* p=str; scanf("%s",p[2]);15.下面程序段的运行结果是【】。

char str[ ]=”ABC”,*p=str;printf (“%d\n”, *(p+3));A. 67B. 0C. 字符’c’的地址D. 字符’c’16.下面程序段的运行结果是【】。

char *p="abcdefgh";p+=3;printf (“%d\n”, strlen (strcpy (p,"ABCD")));A. 8B. 12C. 4D. 717.若已定义:char s[10];则在下面表达式中不表示s[1]的地址的是【】。

A. s+1B. s++C. &s[0]+1D. &s[1]18.下面程序段的运行结果是【】。

char a[]="1anguage",*p;p=a;while(*P!='u') {Printf("%c",*p-32);p++;}A)LANGUAGE B)language C)LANG D)language19.若有定义;int a[5];则a数组中首元素的地址可表示为【】。

A. &aB. a+1C. aD. &a[1]20.设有int a[ ]={10,11,12},*p=&a[0];则执行完 * p ++;*p + =1;后a[0],a[1],a[2]的值依次是【】。

(A)10,11,12 (B)11,12,12(C)10,12,12 (D)11,11,1221.下面程序的输出是【】。

main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf(“%d\n”,*(p+2));}(A)1 (B)2 (C)3 (D)422. 下列4个自定义函数中能实现交换主函数中变量值的功能的是【】。

(A)void fun_a(int x,int y) (B)void fun_b(int *x,int *y) { int *p; { int *p;*p=x;x=y;y=*p; *x=*y;*y=*x} }(C)void fun_c(int *x,int *y) (D)void fun_d(int x,int y) { *x=*x+*y; { int p;*y=*x-*y; p=x;x=y;y=p;*x=*x-*y;} }23. 若有语句:int a=4, *p=&a;下面均代表地址的一组选项是【】。

(A)a,p,&*a (B)*&a,&a,*p (C)&a,p,&*p (D)*&p,*p,&a 24.若有以下定义,则对a数组元素的正确引用是【】。

int a[5],*p=a;A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)25.若有以下定义,则对a数组元素地址的正确引用是【】int a[5],*p=a;A)p+5 B)*a+1 C)&a+l D)&a[0]26.若有以下定义,则*(p+5)表示【】。

int a[1O], *p=a;A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值27.若有以下定义,则p+5表示【】。

int a[1O], *p=a;A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值28.若有以下定义,则数值不为3的表达式是【】。

int x[l0]={0,1,2,3,4,5,6,7,8,9},*p1;A)x[3] B)P1=x+3,*p1++ C)p1=x+2,*(p1++) D)p1=x+2,*++p129. 执行以下程序段后, s的值是【】int a[]={5,3,7,2,1,5,3,10},s=0,k;for(k=0;k<8;k +=2)s += *(a+k);30.下面程序段的运行结果是【】。

#include <stdio.h>main ( ){ static char a[ ]=”Language”, b[ ]=”programe”;char *p1, *p2; int k;p1=a; p2=b;for (k=0 ;k<=7;k++)if (*(p1+k)= = *(p2+k)) printf(“%c”, *(p1+k));}A). gae B). ga C). Language D). 有语法错。

相关主题