2022年指针综合练习题 .pdf
指针综合练习题一、选择题1若有以下定义,则对a数组元素的正确引用是_d_.int a5,*p=a;a)*&a5 b)a+2 c)*(p+5) d)*(a+2)2若有定义:int a23, 则对 a 数组的第i 行 j 列元素地址的正确引用为_d_.a)*(ai+j) b)(a+i) c)*(a+j) d)ai+j3若有以下定义,则p+5 表示 _a_.int a10,*p=a;a)元素 a5的地址b)元素 a5的值c)元素 a6的地址d)元素 a6的值4设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是_b_.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);5若有说明语句char a=It is mine;char *p=It is mine;则以下不正确的叙述是_d_.a)a+1 表示的是字符t 的地址b)p 指向另外的字符串时,字符串的长度不受限制c)p 变量中存放的地址值可以改变d)a 中只能存放10 个字符二、填空题1 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它 (2) 和 (3) 的地址。使用变量名来访问变量,是按(4) 来直接存取变量称为 (5) 方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。答案: (1)地址(2)NULL (3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问2 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。void main()int *a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;couabc;cout*a*b*b) _num=*b_;if(num*c) _num=*c_;cout 输出最小整数 :numendl;3 下面程序段的运行结果是_ef_.char str=abc0def0ghi,*p=str;coutp+5;4 若有定义 :int a=2,4,6,8,10,12,*p=a;则 *(p+1) 的值是 _4_. *(a+5) 的值是 _12_.5 若有以下定义:int a23=2,4,6,8,10,12;则a10 的值是 _8_. *(*(a+1)+0) 的值是_8_.6 以下程序将数组a中的数据按逆序存放,请填空。#define M 8 /定义宏 M 代表了 8void main()int aM,i,j,t;for(i=0;iai;i=0;j=M-1;while(ij)t=*(a+i);_*(a+i)=*(a+j)_;*(_a+j_)=t;i+;j-;for(i=0;iM;i+) cout*(a+i); 三、简答题1 指针变量与整型量的加减运算代表什么意义?答:指针变量与整型量的加减表示移动指针,以指向当前目标前面或后面的若干个位置的目标。指针与整型量i 的加减等于指针值(地址 )与 i*sizeof( 目标类型 )积的加减, 得出新的地址。2 设 a 为数组名,那么a+是否合法?为什么?答:非法。因为a是指针常量。3 有如下定义:int ival=60021; int *ip; double *dp; 下面哪些赋值非法或可能带来错误,并加以讨论。ival=*ip; ival=ip; *ip=ival; ip=ival; *ip=&ival; ip=&ival; dp=ip; dp=*ip; *dp=*ip; 解: ival=*ip; 错,未确定指针ip 初值,用随机内存地址中的数据给ival 赋值是危险的。但语法对。ival=ip; 错,赋值类型错,指针型不能赋给整型。*ip=ival; 错,未确定指针ip 初值,用ival 给随机内存赋值是危险的。但语法对。ip=ival; 错,赋值类型错,整型不能赋给指针型。*ip=&ival; 错,赋值类型错,地址(指针型)不能赋给整型。ip=&ival; 对,地址赋给指针型。dp=ip; 错,整型指针不能赋给双精度指针。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - dp=*ip; 错,赋值类型错,整型不能赋给指针型。*dp=*ip; 对,赋值类型转换四、编程题要求用指针的方法完成:输入一串英文文字,统计其中字母(不区分大小写 )的数目。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -