C语言单元测试第六章指针附答案_第1页
C语言单元测试第六章指针附答案_第2页
C语言单元测试第六章指针附答案_第3页
C语言单元测试第六章指针附答案_第4页
C语言单元测试第六章指针附答案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言单元测试第六章指针[复制]基本信息:[矩阵文本题]*姓名:________________________学号:________________________1.下列关于指针说法的选项中,正确的是()[单选题]*A、指针是用来存储变量值的类型。B、指针一旦定义就不能再指向别的变量。C、指针当中存储的是变量的内存地址。(正确答案)D、指针一旦定义必须要指向某一个变量。答案解析:指针中存储的不是变量本身的值,而是变量的内存地址2.关于指针定义,下列选项中正确的是()[单选题]*A、intx;intp=&x;B、intx;int*p=&x;(正确答案)C、intx;intp=*x;D、intx;int*p=*x;答案解析:指针的定义语法格式为:数据类型*指针变量名3.下列关于指针说法的选项中,正确的是()[单选题]*A、指针是用来存储变量值的类型B、指针类型只有一种C、指针变量可以与整数进行相加或相减(正确答案)D、指针不可以指向函数答案解析:指针可以与整数进行简单的加减运算,步长是指针指向的数据类型大小4.下列选项中哪一个是取值运算符()[单选题]*A、*(正确答案)B、&C、#D、$答案解析:指针取值运算符为*5.对于类型相同的两个指针变量,下列选项中不能进行的运算是()[单选题]*A、<(正确答案)B、=C、+D、-答案解析:指针中存储的是变量的地址,无法进行比较大小的运算6.下列关于指针变量的描述,不正确的是()[单选题]*A、在没有对指针变量赋值时,指针变量的值是不确定的B、同类指针类型可以进行相减操作C、在使用没有赋值的指针变量时,不会出现任何问题(正确答案)D、可以通过指针变量来取得它指向的变量值答案解析:没有赋值的指针变量,可能指向任何地方,如果指向系统,那么使用该指针可能导致系统崩溃。7.若有以下定义和语句:doubler=99,*p=&r;*p=r;则下列描述中正确的是()[单选题]*A、以下两处的*p含义相同,都说明给指针变量p赋值B、在”doubler=99,*p=&r”中,把r的地址赋值给了p所指向的存储单元(正确答案)C、语句*p=r把变量r的值赋给指针变量pD、语句*p=r取变量r的值放回r中答案解析:第一个*p是取r的地址赋值给指针变量p,第二个*p是将r的值赋值给指针p所指向的内存空间。8.若有定义:inta[3]={1,2,3},*p,i;p=a;且0<=i<10,则下列选项中,对数组元素引用错误的是()[单选题]*A、*(a+1)B、a[p-a]C、p+i(正确答案)D、*(&a[i])答案解析:选项3只是将指针指向了第i+1个元素,其中存储的只是元素的地址,并没有引用元素。9.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则下列不能正确执行的选项是()[单选题]*A、k=*p1+*p2B、p2=k(正确答案)C、p1=p2D、k=*p1*(*p2)答案解析:k为int型变量,p2为指针变量,两者不能相等10.C语言中关于内存分配,下列描述中错误的是()[单选题]*A、malloc()函数用于动态分配堆内存B、free()函数用于释放堆内存C、栈空间上的内存由编绎器自动分配释放D、堆空间上的内存如果程序员不释放,则内存永远都无法回收(正确答案)答案解析:堆空间上的内存如果程序员不释放,等到程序运行结束后会由OS回收。11.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。[单选题]*A、p=2*(int*)malloc(sizeof(int));(正确答案)B、p=(int*)malloc(2*sizeof(int));C、p=(int*)malloc(2*4);D、p=(int*)calloc(2,sizeof(int));答案解析:malloc()用于申请内存空间,其返回值是该内存空间的地址。12.对于基类型相同的两个指针变量之间,不能进行的运算是()。[单选题]*A、<B、=C、+(正确答案)D、-答案解析:无答案解析13.以下程序的输出结果是()。

voidmain()

{

chara[10]={'1','2','3','4','5','6','7','8','9',0},*p;

inti=8,p=a+i;

printf("%s\n",p-3);

}[单选题]*A、6B、6789(正确答案)C、'6'D、789答案解析:p指向字符串"123456789",p=a+i后p指向字符串"9",p-3后指向字符串"6789"。14.以下程序执行后a的值是()。

voidmain()

{

inta,k=4,m=6,*p1=&k,*p2=&m;

a=p1==&m;

printf("%d\n",a);

}[单选题]*A、4B、1C、0(正确答案)D、运行时出错,a无定值答案解析:p1是指针,存储变量k的地址,k的地址和m的地址不同,所以p1==&m返回0。15.有程序段:int*p,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a的值为()。[单选题]*A、12B、11(正确答案)C、10D、编译出错答案解析:因为指针p存储变量a的地址,所以*p返回a的值,最终a=*p+b相当于a=a+b。16.以下程序的输出结果是()。

#include<stdio.h>

inta[3][3]={1,2,3,4,5,6,7,8,9},*p;

voidf(int*s,intp[][3])

{

*s=p[1][1];

}

voidmain()

{

p=(int*)malloc(sizeof(int));

f(p,a);

printf("%d\n",*p);

}[单选题]*A、1B、4C、7D、5(正确答案)答案解析:f()函数的作用是为指针s指向的变量赋值,所以将指针p代入f()函数中时,p指向的内存空间被赋值为a[1][1]。17.以下程序的输出结果是()。

fut(int**s,intp[2][3])

{

**s=p[1][1];

}

voidmain()

{

inta[2][3]={1,3,5,7,9,11},*p;

p=(int*)malloc(sizeof(int));

fut(&p,a);

printf("%d\n",*p);

}[单选题]*A、1B、7C、9(正确答案)D、11答案解析:fut()函数的作用是将数组元素a[1][1]的值赋给指针p指向的内存空间。18.有如下说明: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答案解析:选项A中,*p+9首先计算*p的值,返回1,其次计算1+9的值,返回10;选项C中,*p+=9是对a[0]进行自增运算,然后返回运算后的a[0]的值;选项D中,p+8返回返回a[8]的地址。19.以下程序运行后,输出结果是()。voidmain(){char*s="abcde";s+=2;printf("%ld\n",s);}[单选题]*A、cdeB、字符c的ASCLL码值(正确答案)C、字符c的地址D、出错答案解析:首先指针s指向字符串"abcde"的首地址,也就是字符"a"的地址;然后s+=2后,s指向字符串"cde"的首地址,也就是字符"c"的地址。20.下面程序的输出结果是()。

voidmain()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

printf("%d\n",*(p+2));

}[单选题]*A、3(正确答案)B、4C、1D、2答案解析:首先p指向数组a的首地址,也就是a[0]的地址;然后p+2指向a[2]的地址,那么*(p+2)获取的是a[2]的值。21.若有说明:intw[3][4]={{0,1},{2,4},{5,8}};int(*p)[4]=w;那么数值为4的表达式是()。[单选题]*A、*w[1]+1B、p++,*(p+1)(正确答案)C、w[2][2]D、p[1][1]答案解析:选项A中*w[1]返回元素w[1][0]的值;选项B中p++后p指向w[1]的地址,*(p+1)返回数组w[2]的首地址;选项C中w[2][2]的值是0。22.若有以下说明和语句,其中对c数组元素的正确引用是()。intc[4][5],(*cp)[5];cp=c;[单选题]*A、cp+1B、*(cp+3)C、*(cp+1)+3D、*(*cp+2)(正确答案)答案解析:选项A中,cp+1返回数组c[1]的地址;选项B中,*(cp+3)返回数组c[3]的首地址;选项C中,*(cp+1)+3返回数组元素c[1][3]的地址。23.假设有定义:int(*ptr)();那么以下叙述中正确的是()。[单选题]*A、ptr是指向一维组数的指针变量B、ptr是指向int型数据的指针变量C、ptr是指向函数的指针,该函数返回一个int型数据(正确答案)D、ptr是一个函数名,该函数的返回值是指向int型数据的指针答案解析:无答案解析24.假设有如下定义:char*aa[2]={"abcd","ABCD"};那么以下说法中正确的是()。[单选题]*A、aa数组成元素的值分别是"abcd"和ABCD"B、aa是指针变量,它指向含有两个数组元素的字符型一维数组C、aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址D、aa数组的两个元素中各自存放了字符'a'和'A'的地址(正确答案)答案解析:aa是一个长度为2的指针数组,每个数组元素都是一个指针,分别指向一个字符串的首地址。25.若有定义和语句:

int**pp,*p,a=10,b=20;

pp=&p;

p=&a;

p=&b;

printf("%d,%d\n",*p,**pp);

那么输出结果是()。[单选题]*A、10,20B、10,10C、20,10D、20,20(正确答案)答案解析:pp=&p表示将指针p的地址赋给二级指针pp;p=&a表示将变量a的地址赋给指针p;p=&b表示将变量b的地址赋给指针p。所以最后pp指向p,p指向b。26.下列程序的输出结果是()。

voidmain()

{

inta[5]={2,4,6,8,10},*p,**k;

p=a;

k=&p;

printf("%d",*(p++));

printf("%d\n",**k);

}[单选题]*A、44B、22C、24(正确答案)D、46答案解析:p++返回a[0]的地址,p指向a[1]。因为k指向p,所以**k返回a[1]的值。27.定义一个指针变量,它可以指向任何数据类型的变量。[判断题]*对错(正确答案)答案解析:指针变量的类型必须与它所指向的变量的数据类型保持一致。28.一维数组的数组名中存放的是数组内存中的首地址。[判断题]*对错(正确答案)答案解析:数组名中存放的是数组内存中的首地址。29.若有定义int*p[10];则p是指向二维数组的一个指针。[判断题]*对(正确答案)错答案解析:定义一个指向二维数组的指针,正确的定义方式为int(*p)[10];30.若有定义char*p1;int**p2;则可以将p1的地址赋值给p2,p2=&p1。[判断题]*对错(正确答案)答案解析:p2是int类型的二级指针,不能存储char类型的一级指针p1。31.二级指针所占内存的大小为4字节。[判断题]*对错(正确答案)答案解析:二级指针也是一个指针,指针变量所占内存大小为4字节。32.用于存放其他变量的地址的变量称为指针变量。[判断题]*对(正确答案)错答案解析:在C语言中有一种特殊类型的变量,专门用于存放其他变量的地址,这种变量称为指针变量,通常简称指针。33.内存是以字节为单位的连续存储空间,每个字节都有一个编号,这个编号称为地址。[判断题]*对(正确答案)错答案解析:在程序运行过程中,数据都是保存在内存中的,内存是以字节为单位的连续存储空间,每个字节都有一个编号,这个编号称为地址。变量也是有地址的,每个变量在生存期内都占据一定数量的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论