1、第六章 指针一、选择题(把正确选项的字母标号填到表格中)题号1234567891011121314151617181920答案- 4 -1.以下用来对指针实施间接运算的是 。A)&B)C)* D)-2.以下不能使变量a的值增1的语句是 。A)a+; B)*p = *p + 1;C)a += 1; D)*p+; 3.以下用来定义指向整型变量指针ptr的语句是A)int *ptr;B)int *ptr; C)int ptr;D)int &ptr; 4.以下是正确定义指针ptr同时使其指向x的是 。A)int *ptr = *x; B)int &ptr = *x; C)int *ptr = x; D
2、)int *ptr = &x;5.以下关于二级指针的描述正确的是 。A)指向变量的指针B)指向同一个变量的两个指针C)指向相同类型两个变量的两个指针D)指向一级指针的指针6.若有下列的语句,则表示变量x中值的是 。 int x; int *p = &x; int *pp = &p;A)p B)*pp C)pp D)*pp 7若有下列的定义,则错误的操作是 。 int i; float f; int *pd; float *pf;A)i = 5; B)pf = &f; C)f = 5; D)pd = pf; 8.以下关于指针与数组关系的描述中正确的是 。A)若ary是数组,则 *ary与&ary
3、0等价B)若ary是数组,则 *ary与*ary0等价 C)若ary是数组,则ary是一指针变量D)若ary是数组,则 *ary与ary0等价9.以下关于指针算术运算的描述中不正确的是 。A)数组名也可以进行自增或自减运算B)若p为指针,则p + n是p后方第n个元素的地址 C)若p为指针,则p+是使p指向其后方1个元素的位置D)可以通过对数组名取间接运算来访问数据10.以下不是C的内存分配函数的是 。A)alloc()B)malloc()C)calloc()D)realloc() 11.以下关于动态内存分配的描述中正确的是 。A)动态分配的内存没有自己的名字,只能通过指针引用B)calloc
4、函数用来改变先前使用malloc函数分配的内存空间 C)malloc函数用来分配数组空间D)realloc函数用来释放内存12.在C中,用来进行动态分配数组的函数是 。A)alloc()B)malloc()C)calloc()D)realloc()13.下面程序的输出结果是 。void main(void) int a10=1,2,3,4,5,6,7,8,9,10;int *p=a;printf(%dn,*(p+2);A)3B)4C)1D)214.若有:#include void main(void) int i;int a=2,4,6,8;int *p=a;for(i=0;i4;i+)ai=
5、*p;printf(%dn,a2);上面程序输出结果是 。A)6B)8C)4D)215.下列程序的输出结果是 。void main(void)int a5=2,4,6,8,10,*p,*k;p=a;k=&p;printf(%d,*(p+);printf(%dn,*k);A)4B)22C)24D)4616.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其原因是 。void main(void) int *p,a;p=&a;printf(input a:);scanf(%d,*p);A)*p表示的是指针变量p的地址B)*p表示的是变量a的值,而不是变量a的地址C)*p表示的是指针变量
6、p的值D)*p只能用来说明p是一个指针变量17.若有:int a,b,*p,*q;,则下列赋值语句错误的是 。A)p=&a;B)q=&b;C)p=q;D)p=a;18.若有:int a,*b; b=&a;,则下列运算错误的是 。A)*&a B)&*aC)*&bD)&*b19.若有:int *p,s20,i;p=s;表示数组元素si的表达式不正确的是 。A)*(s+i)B)*(p+i)C)*(s=s+i)D)*(p=p+i)20.下列程序的执行后结果是 。#include stdio.hvoid main(void) int c4=1,2,3,4,5,6,7,34,213,56,62,3,23,
7、12,34,56;printf(%d,%dn,c22,*(*(c+1)+1);A)3,6B)6,5C)62,6D)56,6二、判断题(错的填,对的填)题号1234567891011121314151617181920答案1.若a是变量,则表达式&a的值是一地址常量。2.若a是数组,则表达式a的值是一地址常量。3.类型相同的指针就可以相互赋值。4.若有int a,*pa;,则执行pa=&a;后,pa就指向了变量a。5.参与取间接运算(*)的对象一定是指针。6.多级指针可以直接指向变量。7.三级指针只能指向二级指针。8.若有int aN,i;,则对于i0,N-1,表达式a+i与ai等价。9.若有i
8、nt aN,i;,则对于i0,N-1,表达式*(a+i)与ai等价。10.若有int aMN,i,j;,则对于i0,M-1,j0,N-1表达式*(a+i)与ai等价。11.若有int aMN,i,j;,则对于i0,M-1,j0,N-1表达式*(a+i)+ j与&aij等价。12.若有int aMN,i,j;,则对于i0,M-1,j0,N-1表达式*(ai+ j)与aij等价。13.若有int (*p)4;,则p是一个含4个元素的指针数组。14.若有int *p4;,则p是一个可以指向列数为4的二维数组的行指针。15.若p是行指针且指向了二维数组a的首行,则执行p+;后p就指向了a的第二行。16
9、.若有int a4 =1,2,3,4; int *p=&a2;,则p0与a2等价。17.若有int a4 =1,2,3,4; int *p=&a2;,则执行*p+;后a2的值变为4。18.若有int a4 =1,2,3,4; int *p=&a2;,则执行+*p;后a2的值变为4。19.使用malloc函数必须要包含头文件stdlib.h。20.使用malloc函数动态分配的内存空间可以直接用来存放数据。三、应用题1.根据要求把实现相关功能的语句填在表格中。已知条件要求实现的语句int x;int a5=1,2,3,4,5;int *p;定义指针px并指向x定义二级指针ppx并间接指向x通过p
10、x为x输入数据的scanf通过ppx输出x值的printf定义指针p1指向a0定义指针p2指向a3通过p动态分配一个存整数的空间2根据已知条件,把给定语句的输出结果写在表格中。已知条件语句语句输出结果int a = 1,2,3,4,5;int *p = a;printf(“%dn”,*a);printf(“%dn”,*&a2);printf(“%dn”,*p);printf(“%dn”,*(p+1);printf(“%dn”,*p+1);3根据已知条件,把给定语句的输出结果写在表格中。已知条件语句语句输出结果int a3= 1,2,3,4,5,6,7,8,9;int (*p)3 = a;printf(“%dn”,*p0);printf(“%dn”,*a2);printf(“%dn”,*(p2+1);printf(“%dn”,*(*p+1);printf(“%dn”,*(*(p+1)+2);四、编程题1.C语言程序设计习题解答与上机指导(第2版)第189页【编程5-1】。2.C语言程序设计习题解答与上机指导(第2版)第190页【编程5-2】。