
第八章指针 1,若intx,b:,则正确的献值表达式是 A)pb=kxB)pb=x C)*pb=kx1 D)*pb=*x 2.有如下程序段 int和,4=10,b=1: pka:a-ptb: 执行该程序段后。a的值为 A)12B)11C)100)编译出错 3.若有以下定义和语句: doubler=99,pmkr: 到 则以下正确的叙述是 A)以下两处的仰含文相同,都说明给指针变量p赋值 B)在“do动l0r=99,抑=r1“中,把r的地址赋值给了p所指的存储单元 C)语句”p=:"把变量r的值队给指针变量p D)语句*"取变量r的植放日r中 4.下列程序的输出结果是 A)4B)6C)8D)10 inth-2: intfune (inta) btwa:return(b方} a1n() [inta=2,res=2: rest"func (Aa): printf ('sd\n',res) 5.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 intadd(intx,inty,【】x》 {【】%y:】 6.下面程序的输出是
第八章 指针 1.若 intx,*pb;,则正确的赋值表达式是 A)pb=&xB)pb=x;C)*pb=&x;D)*pb=*x 2.有如下程序段 int*p,a=10,b=1; p=&a;a=*p+b; 执行该程序段后,a 的值为 A)12B)11C)10D)编译出错 3.若有以下定义和语句: doubler=99,*p=&r; *p=r; 则以下正确的叙述是 A)以下两处的*p 含义相同,都说明给指针变量 p 赋值 B)在"doubler=99,*p=&r;"中,把 r 的地址赋值给了 p 所指的存储单元 C)语句"*p=r;"把变量 r 的值赋给指针变量 p D)语句"*p=r;"取变量 r 的值放回 r 中 4.下列程序的输出结果是 A)4B)6C)8D)10 intb=2; intfunc(int*a) {b+=*a;return(b);} main() {inta=2,res=2; res+=func(&a); printf("%d\n",res);} 5.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 intadd(intx,inty,【】z) {【】=x+y;} 6.下面程序的输出是

A)23B)24C)250)26 voidprty (intx) {orintf("n"。+*x)n】 main ( [inta=25:prtv (&a):} 7,下面程序的输出结果是【】 voidas (intx.inty.int*cp.int*dp) {cp-x与:dp-y:] main ( [inta=4.b=3.c.d: as(a,b,kc,&d)归 printf("s".c,d):】 8,请选出以下程序的输出结果 include(stdio.h> sub (intx.inty.int*z) {*2=y-x!1 main ( [inta.b.c: sub (10.5.ka)sub (7.a.&b)sub (a.b.ke) printf ("%d,&d.%d'\n".a,b.c): A)5,2.3B)-5,-12.-7 C)-5,-12,-17D)5,-2,-7 9.有以下程序 intfun (intx,inty,intecp,intedp) [ecp=xty:*dp=x-y: main ( finta.b.c.d a-30:b-50: fun (a,b,&c,&d): printf (sd sdin".e.d)
A)23B)24C)25D)26 voidprtv(int*x) {printf("%d\n",++*x);} main() {inta=25;prtv(&a);} 7.下面程序的输出结果是【】。 voidas(intx,inty,int*cp,int*dp) {*cp=x+y;*dp=x-y;} main() {inta=4,b=3,c,d; as(a,b,&c,&d); printf("%d%d\",c,d);} 8.请选出以下程序的输出结果 #include sub(intx,inty,int*z) {*z=y-x;} main() {inta,b,c; sub(10,5,&a);sub(7,a,&b);sub(a,b,&c); printf("%d,%d,%d\n",a,b,c);} A)5,2,3B)-5,-12,-7 C)-5,-12,-17D)5,-2,-7 9.有以下程序 intfun(intx,inty,int*cp,int*dp) {*cp=x+y;*dp=x-y;} main() {inta,b,c,d; a=30;b=50; fun(a,b,&c,&d); printf("%d;%d\n",c,d);}

输出结果是 A)50:308)30:50C)80:-200)80:20 10。要求稀数的功能是交换x和y中的植,且通过正确调用运回交换结果能正确执行 此功能的函数是 A)funa(int*,inty)(int*p:p=*x:率=刺:=p:} B)fund (intx,inty)[intt:t"x:x"y:yt: C)fune(int杯,inty)(=*y:x: D)fund(int*,int率y)(*=*x+y:y=*-y:=*x-个:} I1.若有说明:1ang*p,a:则不能通过scanf语句正确哈输入项读入数据的程序段是 A)p-a:scnf("ld”,p: B)=(long*》all0e(8 scanf(ld°,p)力 C)scanf (%d",p-a): D)scanf ("ld",&a); 12,以下程序执行后,的值是 A)B)1C)D)运行时出情,无定值 main ( [inta,k=4.m6.pl-kk,*p2-km: a=pl=-Am: printf (sd\n'",a): 13.fn1函数的调用语句为:funl(a,h,c:它将三个整数拔由大到小的顺序调 整后依次放入,b,C,三个变量中,a中救大数。请填空。 voidfun2 (int*x.int*y) intt: 【*x:**y:利=1:} oidfunl(inta,1nt*知h,int布e》 {if【l: if【l if(pe>*nh)fan2(【】D1】 14.对于类型相同的两个指针变量之间,不能进行的运算是 A)(B)"C)+D)
输出结果是 A)50;30B)30;50C)80;-20D)80;20 10.要求函数的功能是交换 x 和 y 中的值,且通过正确调用返回交换结果.能正确执行 此功能的函数是 A)funa(int*x,int*y){int*p;*p=*x;*x=*y;*y=*p;} B)fund(intx,inty){intt;t=x;x=y;y=t;} C)func(int*x,int*y){*x=*y;*y=*x;} D)fund(int*x,int*y){*x=*x+*y;*y=*x-*y;*x=*x-*y;} 11.若有说明:long*p,a;则不能通过 scanf 语句正确给输入项读入数据的程序段是 A)*p=&a;scanf("%ld",p); B)p=(long*)malloc(8);scanf("%ld",p); C)scanf("%ld",p=&a); D)scanf("%ld",&a); 12.以下程序执行后,a 的值是 A)4B)1C)0D)运行时出错,无定值 main() {inta,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m; printf("%d\n",a);} 13.fun1 函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调 整后依次放入 a,b,c,三个变量中,a 中放大数。请填空。 voidfun2(int*x,int*y) {intt; t=*x;*x=*y;*y=t;} voidfun1(int*pa,int*pb,int*pc) {if【】; if【】; if(*pc>*pb)fun2(【】);} 14.对于类型相同的两个指针变量之间,不能进行的运算是 A)<B)=C)+D)-

15,若有以下定义,测不移动指针p,且通过指针p引用值为98的数组元素的表达式 是【】 imtw10j]=23,54,10,33,47,98,72,80.611,*p=: 16,若己定义 inta0=0.1,2.3,4,5,6,7,8,9,pn,i: 其中0忘1名9,则对a数组元素不正确的可引用上 A)a[p-a]B)(a[i])C)p[i]D)a[10] 17.若己定复:i■ta[9],和a:并在以后的语句中未改变p的值,不能表示a[1]地址 的表达式是 A)p+lB)a+IC)a++D)++p 18.若有以下说明: fmta[10j=1,2,3,4,5,6,7,8,9,101.p=a 则数值为6的表达式是 A)p*6阳)◆(p6)C)pt=5D)pt5 19.设P1和2是指向同一个t型一维数组的指计变量,k为t型变量,则不能正 确执行的语句是 A)k=却1+却2:B)2=k:C》P1=f2D)k=1*(2): 20.下面程序的输出是 A)3B)4C)1D)2 main ( {inta[10]=1,2,3,4.5,6.7,8,9,10,pa+1: printf("dn",◆(p2) 21.若有以下的定义: imta0-0,2,3,4,5,6,7,8,9,10j,p-a: 则值为3的表式是 A)p+=2,率(p+)B)2,*+p C)pt-3,*pttD)pt-2,+tp 22.若有以下定义和语句: inta[10j=1,2,3,4,5,6,7,8,9,101.$pa:
15.若有以下定义,则不移动指针 p,且通过指针 p 引用值为 98 的数组元素的表达式 是【】。 intw[10]={23,54,10,33,47,98,72,80,61},*p=w; 16.若已定义: inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中 0≤i≤9,则对 a 数组元素不正确的引用上 A)a[p-a]B)*(&a[i])C)p[i]D)a[10] 17.若已定义:inta[9],*p=a;并在以后的语句中未改变 p 的值,不能表示 a[1]地址 的表达式是 A)p+1B)a+1C)a++D)++p 18.若有以下说明: inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为 6 的表达式是 A)*p+6B)*(p+6)C)*p+=5D)p+5 19.设 P1 和 P2 是指向同一个 int 型一维数组的指针变量,k 为 int 型变量,则不能正 确执行的语句是 A)k=*P1+*P2;B)p2=k;C)P1=P2;D)k=*P1*(*P2); 20.下面程序的输出是 A)3B)4C)1D)2 main() {inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a+1; printf("%d\n",*(p+2)); } 21.若有以下的定义: inta[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为 3 的表式是 A)p+=2,*(p++)B)p+=2,*++p C)p+=3,*p++D)p+=2,++*p 22.若有以下定义和语句: inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

不能表示数组元素的表达式是 A)*pB)a[10]C)*aD)a[p-a] 2公.间读程序 main ( {inta[10]-(1,2,3,4,5,6,7,8,9,0l,$p: a printf (sxin".p) printf ("%x\n",p+9):} 该程序有两个orintf语句。如果第一个printf语句输出的是194,则第二个printf 语句的输出结果是 A)203B)201C)1a4D)1a6 24.请透出正确的程序段 A)intp:B)inI率8,k: sanf("d°,p):◆s-100: 44 C)int*s.k:D)int*s.k char*p,cr char邦,et s表k:sk: p=kc p=kc p'a:sp阳 率g=1: 25.有如下说明 imta[10]-1,2,3,4,5,6,7,8,9,10l,*pa: 则数值为9的表达式是 A)*p+9B)*(p*8)C)*p+=9D)p+8 6.己知指针的指向如下图所示,则执行语句*一后和的值是 A)30B)20C)19D)29 a[o]a[i】a2]a[3]a4]
则不能表示 a 数组元素的表达式是 A)*pB)a[10]C)*aD)a[p-a] 23.阅读程序: main() {inta[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\n",p); printf("%x\n",p+9);} 该程序有两个 printf 语句,如果第一个 printf 语句输出的是 194,则第二个 printf 语句的输出结果是 A)203B)204C)1a4D)1a6 24.请选出正确的程序段 A)int*p;B)int*s,k; scanf("%d",p);*s=100; …… C)int*s,k;D)int*s,k; char*p,c;char*p,e; s=&k;s=&k; p=&c;p=&c; *p='a';s=p; …*s=1; … 25.有如下说明 inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为 9 的表达式是 A)*p+9B)*(p+8)C)*p+=9D)p+8 26.已知指针 p 的指向如下图所示,则执行语句*--p;后*p 的值是 A)30B)20C)19D)29 a[0]a[1]a[2]a[3]a[4]

0 0 0 0 '0 p 27.执行以下程序后,y的值是 main ( inta0=2,4,8,8,10: inty=l,x.p: p=ka[1]1 for(x=0:x<3:x+) t◆(pi) printf (sdin',y) A)17B)18C)190)20 28.设有如下定义: intarr[]=(6.8.9.10): int*ptr: 则下列程序段的输出结果为 ptrearr: *(ptr+2)+=2: rintf("ddn°,ptr,$(ptr+2)h A)8:108)6:8c)7:90)6:10 9。下列程序执行后的输出结果是 A)6B)7C)8D)9 voidfune (intsa.intb[]) 6[0]-a6:】 main ( [inta,b[5]: a-0:b[0]-3: func (a,b):printf ("d\n",b[o])
1 0 2 0 3 0 4 0 5 0 ↑ p 27.执行以下程序后,y 的值是 main() {inta[]={2,4,6,8,10}; inty=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf("%d\n",y);} A)17B)18C)19D)20 28.设有如下定义: intarr[]={6,8,9,10}; int*ptr; 则下列程序段的输出结果为 ptr=arr; *(ptr+2)+=2; printf("%d;%d\n",*ptr,*(ptr+2)); A)8;10B)6;8C)7;9D)6;10 29.下列程序执行后的输出结果是 A)6B)7C)8D)9 voidfunc(int*a,intb[]) {b[0]=*a+6;} main() {inta,b[5]; a=0;b[0]=3; func(&a,b);printf("%d\n",b[0]);}

0,下面程序把数组元素中的最大值放入a[0们中。则在1f语句中的条件表达式应该是 A)p>aB)*p>a[0]C)*px*a[0]D)*p[0]>*a[0] main ( {intn[10]={6,7,2,9.1,10.5,8,4,3}.p=,11 for (i=0:i<10:i++,p++) if(【】)a=邦t printf("d°,a:] 31,以下函数返回8所指数组中最小的值所在的下标值 fun(intea,intn】 [inti,j-0,p: =九 for (i=j:i<n:i++) if(a[i]a[p])【】 return (p) 在下划线处应填入的是 A)i=pB)a[p]=a[i]c)p=jD)p=i 32.以下程序的运行结果是 A)运行后报错B)6C)6120)55 年include"stdio.h" nain ( [inta0-1,2,3,4,5,6,7,8,9,10,11,12: nt和=a5。刺=NL山 gt(p5)月 printf ("sdid\n",p,q):} 3。要求函数的功能是在一维数组a中查找x值:若找到侧返回所在的下标值,否则返 回0:数列放在a[1]到a[中。不能正确执行此功能的函数是 A)funa (inta,intn,intx) {*a=x:hile(an]!=w)n一:returmn:】 B)funb (int*a.intn.intx)
30.下面程序把数组元素中的最大值放入 a[0]中。则在 if 语句中的条件表达式应该是 A)p>aB)*p>a[0]C)*p>*a[0]D)*p[0]>*a[0] main() {inta[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i; for(i=0;i<10;i++,p++) if(【】)*a=*p; printf("%d",*a);} 31.以下函数返回 a 所指数组中最小的值所在的下标值 fun(int*a,intn) {inti,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]<a[p])【】 return(p);} 在下划线处应填入的是 A)i=pB)a[p]=a[i]C)p=jD)p=i 32.以下程序的运行结果是 A)运行后报错 B)66C)612D)55 #include"stdio.h" main() {inta[]={1,2,3,4,5,6,7,8,9,10,11,12}; int*p=a+5,*q=NULL; *q=*(p+5); printf("%d%d\n",*p,*q);} 33.要求函数的功能是在一维数组 a 中查找 x 值;若找到则返回所在的下标值,否则返 回 0;数列放在 a[1]到 a[n]中。不能正确执行此功能的函数是 A)funa(int*a,intn,intx) {*a=x;while(a[n]!=x)n--;returnn;} B)funb(int*a,intn,intx)

[intk:for (k=1:ksB)*p>*sC)a[p]>a[s]D)p-a>p-s 35.若有以下定义和语句: imta[10j={1,2.3,4,5,6,7,8,9,101。wp= 则不能表示数组元素的表达式是 A)wpb)》af10jC)*aD)ap-a】 6.若有以下调用语句,则不正确的n函数的首部是 A)voidfun (intm.intx[])B)voidfun (ints.inth[41]) C)voidfun (intp.int*s)D)voidfun (intn.inta) main ( inta[50],n: fun (n,&a[9]) 叶 37。请选出以下程序的输出结果 年include(stdio.hy fun (int*s.intnl.intn2)
{intk;for(k=1;ksB)*p>*sC)a[p]>a[s]D)p-a>p-s 35.若有以下定义和语句: inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示 a 数组元素的表达式是 A)*pB)a[10]C)*aD)a[p-a] 36.若有以下调用语句,则不正确的 fun 函数的首部是 A)voidfun(intm,intx[])B)voidfun(ints,inth[41]) C)voidfun(intp,int*s)D)voidfun(intn,inta) main() {… inta[50],n; … fun(n,&a[9]); …} 37.请选出以下程序的输出结果 #include fun(int*s,intn1,intn2)

[inti,j.t: i=nl:j=n2: while (i(j) [t-◆(s+i): *(s+i)*(8+j (stj)"t: 1+4:-:》 main ( [inta[10]-(l,2,3,4,5,6,7,8,9,0l,i,p-a fun (p.0.3): fun (p.4.9) fun(p,0,9: far(i-0:i10:it+)printf("d°,◆(a*i): printf ("\n") A)0987654321B)4321098765 C)5678901234D)0987651234 33.请读程序: #include(stdio.h> intA[1-2,4,6,8: main ( [intI,*PmA: for(=0:I<4:I+)A[I】=种+ printf ("sd\n",A[2]):) 上面程序输出结果是 A)6B)8C)4D)2 39.下面程序的输出是【1. adefineP (ar)printf ('sd",ar) main ( {intj,a0=l,3,5,7,9,11,13.15,*p=a+5: for (j-3:j:j-)
{inti,j,t; i=n1;j=n2; while(i intA[]={2,4,6,8}; main() {intI,*P=A; for(I=0;I<4;I++)A[I]=*P++; printf("%d\n",A[2]);} 上面程序输出结果是 A)6B)8C)4D)2 39.下面程序的输出是【】。 #definePR(ar)printf("%d",ar) main() {intj,a[]={1,3,5,7,9,11,13,15},*p=a+5; for(j=3;j;j--)

Isvitch (j) lcasel: case2:PR (*p++):break: case31豫(*(-p)h} 1 40.请读程序: f (intb].intn) [inti,rl: for(i=0:1 voidFUN (int*s) [staticintJ-0: do[s[U]+-s[U+1]:hi1e(+J2:} main ( {intK,A10]=1.2,3,4,5卧: for (K=1:K3:K++)FUN (A): for (K-0:K5:K++)printf (%d",A[K]):) 上面程序输出结果是 A)347568)23445C)35745D)12345 2.请选出以下程序的输出结果 #include(stdio.h> nain (
{switch(j) {case1: case2:PR(*p++);break; case3:PR(*(--p));} }} 40.请读程序: f(intb[],intn) {inti,r=1; for(i=0;i voidFUN(int*S) {staticintJ=0; do{S[J]+=S[J+1];}while(++J main()