C语言-第8章 指针.doc
第8章 善于利用指针一、单项选择题1 语句int *p;说明了 。A)p是指向一维数组的指针 B)p是指向函数的指针,该函数返回一int型数据C)p是指向int型数据的指针 D)p是函数名,该函数返回一指向int型数据的指针2. 变量的指针,其含义是指该变量的:( ) A) 值 B) 地址 C) 名 D)一个标志3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是( )A) pb=&x B) pb=x C) *pb=&x D) *pb=*x4、已知:int a, *p=&a; 则下列函数调用中错误的是( )。 A、scanf(“%d”,&a); B、scanf(“%d”,p); C、printf(“%d”,a); D、printf(“%d”,p);5. 对于同类型的指针变量,不可能进行的运算是()。A)- B)= C)+ D)=6. 下列不正确的定义是()。A)int *p=&i,i; B)int *p,i; C)int i,*p=&i; D)int i,*p;7. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是:A)p=q B)*p=*q C)n=*q D)p=n8. int *p,a=10,b=0; p=&a; a=*p+b;执行该程序段后,a的值为 A) 编译出错 B) 10 C) 11 D) 129有语句:int a10,;则 是对指针变量p的正确定义和初始化。A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;10. 若有说明语句“int a5,*p=a;”,则对数组元素的正确引用是( )。A)ap B)pa C)*(p+2) D)p+211. 若指针变量p指向整型数组a10的首地址, 即p=a ; 则下列数组元素ai的表示方法中正确的是( )A) p+i B)&( a+i) C) *(a+i) D) *(p+i*2)12. 有如下程序: int a10=1,2,3,4,5,6,7,8,9,10,*P=a;则数值为9的表达式是 A) *P+9 B) *(P+8) C) *P+=9 D) P+813. 若有以下定义,则不能表示a数组元素的表达式是( )。 int a10=1,2,3,4,5,6,7,8,9,10,*p=a;A)*p B)a10 C)*a D)ap-a14. 已知int a5,*p=a;下面的叙述中正确的是 。A) p+1与a+1等价 B) p1与*p等价 C) *(p+1)与a+1等价 D) p1与a+等价15. 若有以下说明: int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为4的表达式是A) *p+4 B) *(p+4) C) *(p+3) D) p+316. 下面程序的输出结果是 main() int a =1,2,3,4,5,6,7,8,9,0,*p; p=a; printf(“%dn”,*p+1); A) 0 B) 1 C) 2 D) 输出错误18. 执行语句 char c10= ”abcd”,*pc=c; 后,*(pc+4)的值是()A) “abcd” B)0 C) d D) 不确定19下列函数的功能是 。 void fun(int *p1,int *p2) int p;p=*p1;*p1=*p2;*p2=p;A) 交换*p1和*p2的值 B) 语法正确,但无法交换*p1和*p2的值C) 交换*p1和*p2的地址 D)有语法错误20. 有如下程序main() char s=“ABCD”, *P;for(p=s+1; p<s+4; p+) printf (“%sn”,p); 该程序的输出结果是 A) ABCD B) A C) B D) BCDBCD B C CDCD C D DD D21. 请读程序,输出结果为: ( )#include<stdio.h>int a=2,4,6,8;main() int i,b4;int *p=a;for(i=0;i<4;i+) bi=*p;p+;printf("%dn",b2);A) 6 B) 8 C) 4 D) 2二、阅读程序,写出运行结果1.# include <stdio.h>main ( ) int x = 10, 20, 30, 40, 50 ;int *p ;p=x;printf ( “%d”, *(p+2 ) ); 运行结果为: 302.#include <stdio.h>main( ) char s=”abcdefg”; char *p; p=s; printf(“ch=%cn”,*(p+5);运行结果为: ch=f3.#include<stdio.h>main ( ) int a=1, 2, 3, 4, 5 ;int x, y, *p;p=a;x=*(p+2);printf("%d:%d n", *p, x);运行结果为: 1:34.#include <stdio.h>main( ) int a =1, 2, 3, 4, 5, 6; int x, y, *p; p = &a0; x = *(p+2); y = *(p+4); printf(“*p=%d, x=%d, y=%dn”, *p, x, y);运行结果为: *p=1, x=3, y=55.#include<stdio.h>main() int a5=1,2,3,4,5; int i,*p; p=a; for(i=0;i<5;i+)printf("*%d",ai); for(i=0;i<5;i+) printf("#%d",*p+);运行结果为: *1*2*3*4*5#1#2#3#4#56.#include<stdio.h>main() static int a =2,5,7; int s,k,*p=NULL; s=1; p=a; for (k=0;k<3;k+) s*=*(p+k); printf("%dn",s);运行结果为: 707.#include<stdio.h>main()int x=2,y,z; int *px=&x; *(px+1)=4; y=*+px; z=+*px; printf("ny=%dz=%d",y,z); 运行结果为: y=4z=38#include <stdio.h>main()char a="I am a boy.", b20;int i; for(i=0; *(a+i)!='0' i+) *(b+i)= *(a+i);*(b+i)='0' for(i=0; bi!='0' i+) printf("%c",bi); 运行结果为:I am a boy.9.#include<stdio.h>main() int a=1,2,3,4,5,6;int *p;p=a;printf("%d ",*p);printf("%d ",*(+p);printf("%d ",*+p);printf("%d ",*(p-); p+=3;printf("%d %d ",*p,*(a+3); 运行结果为:2 3 3 5 410.#include <stdio.h>char s=”ABCD”;main() char *p; for(p=s;p<s+4;p+) printf(“%c %sn”,*p,p); 运行结果为: A ABCDB BCDC CDD D11.#include<stdio.h> main( ) static char a =”Program”, *ptr; for(ptr=a, ptr<a+7; ptr+=2) putchar(*ptr); 运行结果为: Prom12.#include<stdio.h> main() ststic int a =2,5,7;int s,k,*p=NULL; s=1; p=a; for (k=0;k<3;k+) s*=*(p+k); printf("%dn",s);运行结果为: 7013.#include <stdio.h>main() static int a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p,i,j,n; for(p=a0;p<a0+6;p+) printf("%d,",*p);运行结果为: 1,2,3,4,5,6,14. #include<stdio.h>swap(int *, int *);main( ) int a=5,b=0; int *p=&a, *q=&b; printf(“before swap a=%d,b=%dn”,a,b); swap(p,q); printf(“after swap a=%d,b=%dn”,a,b);swap(int *px, int *py) int temp; temp=*px; *px=*py; *py=temp; printf(“in swap x=%d,y=%dn”,*px,*py);运行结果为: before swap a=5,b=0in swap x=0,y=5after swap a=0,b=5