指针习题(C语言程序设计).ppt
第第7章章 指针指针习题习题1.指针变量指针变量保存地址的变量叫指针变量保存地址的变量叫指针变量2.指针变量的声明方式:指针变量的声明方式:数据类型数据类型*变量名;变量名;int*p;char *x;指针变量只占两个字节指针变量只占两个字节3.指针变量的赋值:指针变量的赋值:给一个变量的地址给一个变量的地址int i;p=&ichar a10;x=a;4.指针指向的变量:指针指向的变量:给指针变量的值是哪个变量的地址,给指针变量的值是哪个变量的地址,这个变量就叫指针指向的变量这个变量就叫指针指向的变量5.指针指向的变量的表示:指针指向的变量的表示:*指针变量名指针变量名 *p=2;(i=2)int*q;int b10;int i;q=&b0;for(i=0;i10;i+)scanf(“%d”,q);q+;for(i=0;i10;i+)printf(“%d”,*q);q+一、单项选择题(第188页)1.*p的最终值是()的最终值是()int*p,b=10;int a=2,3,4,1,5,6;p=a;p+=3;a3=b;A.1 B.3 C.4 D.10 p10b2341560a*paa+3*p102.*p的最终值是()的最终值是()char*p,b10=“abcdefghi”;int i;for(i=0,p=b;i10;i+)*p+=*p+1;p=b+5;pib0b1b2b3b4b5b6b7b8b9b10babcdefghi00*pb*pb1b+1cb+2*pdefghij001b+10b+5*p *p=*p+1;p+;210*pg3.3.已知已知p1p1和和p2p2为指针变量,且已指向同一个为指针变量,且已指向同一个整型数组的元素,整型数组的元素,a a是一个整型变量,则下是一个整型变量,则下面无意义的语句是【面无意义的语句是【】。】。p1:p2:a:*p1*p2A.a=*p1;B.a=*p1+*p2;C.a=p1-p2;D.p1=a-p2;7.pA.p+=2,*(+p)B.p+=2,*p+C.p+=3,p+D.p+=2,+*p1234567890数组数组a*p*p*p*p BD 4若有以下定义语句若有以下定义语句int a=1,2,3,4,5,6,7,8,9,0;*p=a;则值为则值为3的表达式是()的表达式是()一单项选择题一单项选择题.8若有以下定义:若有以下定义:char s20=“programming”,*ps=s;则下列则下列不能不能代表代表字符字符o的表达式是的表达式是()A.ps+2 B.s2A.ps+2 B.s2 C.ps2 D.s+=2,*ps;spsps+2 *(ps+2)*(s+2)ps+=2,*ps;一单项选择题一单项选择题.10程序中对fun函数有如下说明:void*fun()此说明的含义是:A.fun函数无返回值B.fun函数的返回值可以是任意的数据类型C.fun函数的返回值是无值型的指针类型D.指针fun()指向一个函数二、填空题1.设有以下定义和语句:设有以下定义和语句:int a32=10,20,30,40,50,60,(*p)2;p=a;则则*(*(p+2)+1)的值为的值为_ 60*(p2+1)p21 *(p+2)1行指针变量行指针变量pp+1p+2*p行指针行指针列指针列指针(元素指针元素指针)*(p+1)*(p+2)2.若有以下说明和语句,则在执行若有以下说明和语句,则在执行for语句后,语句后,*(*(pt+1)+2)表示的数组元素是表示的数组元素是_int t33=1,2,3,4,5,6,7,8,9,*pt3,k;for(k=0;k3;k+)ptk=&tk0;t12指针数组指针数组ptpt0pt1pt21 2 34 5 67 8 9t元素表示:元素表示:*(*(pt+i)+j)3.以下程序运行后输出结果是以下程序运行后输出结果是_main()char s=“9876”*p;for(p=s;ps+2;p+)printf(“%sn”,p);p98760数组数组sss9876876 s+1s+24.若有以下定义:若有以下定义:int a=6,7,8,9,10,*p;则下列程序段的输出结果为则下列程序段的输出结果为_p678910数组数组aap=a;*(p+2)+=2;printf(“%d,%dn”,*p,*(p+2)a*pp+2*(p+2)106,10三、写出程序运行结果1.main()int a=1,2,3,4,5,6;int*p;int i;(;(删除)删除)删除)删除)p=a;*(p+3)+=2;printf(“n1=%d,n2=%dn”,*p,*(p+3);123456apa*pp+3*(p+3)661n1=1,n2=62.main()int i;int*p;p=&i;*p=2;p+;*p=5;p-;printf(“%dn”,i);ip&i*p2&i+1*p5*p3.main()char s=“abcdefg”;char*p;p=s;printf(“ch=%cn”,*(p+5);pabcdefg0ss*p*(p+5)ch=f4.main()int a=2,3,4;int s,i,*p;s=1;p=a;for(i=0;i3;i+)s*=*(p+i);printf(“s=%dn”,s);234apis1a*p*(p+0)*(p+1)*(p+2)24s=24 5.main()int*p1,*p2,*p,a=3,b=5;p1=&a;p2=&b;if(*p1*p2)p=p1;p1=p2;p2=p;printf(“%d,%d,”,a,b);printf(“%d,%d”,*p1,*p2);pp1p23a5b&a&b*p1*p2&a&b&a*p1*p23,5,5,3四四 程序填空程序填空.四四 程序填空程序填空.2.以下函数返回以下函数返回a所指数组中最小值下标所指数组中最小值下标 fun(int*a,int n)int i,j=0,p;p=j;for(i=j ;in;i+)if(aiap)p=i;return p;main()int s=20,10,4,15,35;int k;k=fun(s,5);printf(“%dn”,sk);p=0;1p20 10 4 15 35 5ia0 a1 a2 a3 a4pipii五五 编程编程1.调用函数由调用函数由大大到小排序三个整数(指针法)到小排序三个整数(指针法)2调用函数由大到小排序一维数组(数组名)调用函数由大到小排序一维数组(数组名)void sort(int *a,int n)void sort(int a,int n)5 2 9 6 4 9 2 5 6 4 9 6 5 2 4 9 6 5 2 4 int i;/*i为轮数,共n-1轮*/for(i=0;in-1;i+)i=0i=1i=2i=n-2int k;/*k为最大值下标*/k=i;/*k初值在数组开头*/kkkkint j;/*数组下标*/for(j=i+1;jn;j+)if(akaj)k=j;temp=ai;ai=ak;ak=temp;int temp;a0a1a2a3a4kkkiiii