C语言指针训练试题带答案_第1页
C语言指针训练试题带答案_第2页
C语言指针训练试题带答案_第3页
C语言指针训练试题带答案_第4页
C语言指针训练试题带答案_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

C语言指针训练经典试题带答案考试时间:______分钟总分:______分姓名:______选择题:1.若有`inta=10,*p=&a;`,则以下表达式错误的是()。A.`*p=20`B.`p=&a`C.`*p++`D.`p++=&a`2.关于指针和数组,以下说法正确的是()。A.数组名可以赋值给指针B.数组名等同于指针变量C.指针可以指向数组的任意元素D.数组指针和指针数组相同3.函数`voidswap(int*x,int*y)`的功能是交换两个整数的值。调用`swap(&a,&b);`后,以下说法正确的是()。A.a和b的值交换B.x和y的值交换C.a和b的地址交换D.程序编译错误4.若有`inta[]={1,2,3};int*p=a;`,则`*(p+2)`的值是()。A.1B.2C.3D.地址5.关于`int*p=NULL;`,以下说法正确的是()。A.p指向0地址B.p未初始化C.使用*p会导致程序崩溃D.p可以赋值给其他指针填空题:1.函数`voidfunc(int*x)`中,x是指向整数的______。2.若有`inta=5;int*p=&a;`,则`*p`的值是______。3.数组`intarr[5]={1,2,3,4,5};`,`arr[2]`通过指针表示为`*(arr+______)`。4.指针函数是指返回______的函数。5.动态分配内存的函数是______。读程序题:1.阅读以下程序,写出输出结果。```c#include<stdio.h>intmain(){inta[]={1,2,3,4,5};int*p=a;*(p+2)+=2;p+=1;printf("%d,%d\n",*p,*(p+2));return0;}```2.阅读以下程序,写出输出结果。```c#include<stdio.h>voidfunc(int*x,int*y){inttemp=*x;*x=*y;*y=temp;}intmain(){inta=3,b=5;func(&a,&b);printf("%d,%d\n",a,b);return0;}```3.阅读以下程序,写出输出结果。```c#include<stdio.h>intmain(){inta=10,b=20;int*p=&a;int*q=&b;p=q;printf("%d,%d\n",*p,*q);return0;}```编程题:1.用指针实现函数`char*str_reverse(char*str)`,将字符串`str`反转后返回反转后的字符串(要求原地反转,不使用额外数组)。2.用指针实现函数`int*find_max(int*arr,intsize)`,返回数组`arr`中最大元素的地址。试卷答案选择题:1.D解析:选项D中,`p++`是一个表达式,其值为自增后的地址,不能作为左值赋值,因此错误。其他选项中,`*p=20`通过指针修改变量值,`p=&a`重新指向变量,`*p++`先取值后自增均合法。2.C解析:选项C正确,指针可通过加减运算指向数组任意元素。选项A错误,数组名是常量指针,不可修改;选项B错误,数组名是常量指针,与指针变量性质不同;选项D错误,数组指针指向数组,指针数组元素为指针,两者结构不同。3.A解析:函数通过指针传递地址,形参`x`和`y`指向实参`a`和`b`的内存,交换`*x`和`*y`即交换`a`和`b`的值。选项B错误,交换的是形参值,不影响实参;选项C错误,交换的是地址值,实参值未变;选项D错误,程序编译正确。4.C解析:`p`指向数组首元素`a[0]`,`p+2`指向`a[2]`,`*(p+2)`即`a[2]`的值为3。5.A解析:`NULL`是空指针常量,值为0,故`p`指向0地址。选项B错误,`p`已初始化为`NULL`;选项C错误,使用`*p`是未定义行为,不一定立即崩溃;选项D错误,空指针可赋值给其他指针,但赋值后仍为空指针。填空题:1.指针解析:`int*x`表示`x`是指向整型的指针参数。2.5解析:`*p`通过指针`p`访问变量`a`的值,即5。3.2解析:数组元素`arr[2]`等价于指针表达式`*(arr+2)`。4.指针解析:指针函数是返回指针类型的函数,如`int*func()`。5.malloc解析:`malloc`函数用于动态分配内存,返回指向分配内存的指针。读程序题:1.2,4解析:初始`a={1,2,3,4,5}`,`p`指向`a[0]`;`*(p+2)`即`a[2]`加2变为5,此时`a={1,2,5,4,5}`;`p+=1`后指向`a[1]`,`*p`为2,`*(p+2)`即`a[3]`为4。2.5,3解析:函数`func`通过指针交换`a`和`b`的值,`a`从3变为5,`b`从5变为3。3.20,20解析:`p`初始指向`a`(10),`q`指向`b`(20);`p=q`后`p`指向`b`,故`*p`和`*q`均为`b`的值20。编程题:1.```c#include<string.h>char*str_reverse(char*str){if(str==NULL)returnNULL;char*left=str;char*right=str+strlen(str)-1;while(left<right){chartemp=*left;*left=*right;*right=temp;left++;right--;}returnstr;}```解析:使用双指针`left`(指向字符串首)和`right`(指向字符串末尾),交换指针所指字符,逐步向中间移动,直至相遇,实现原地反转。2.```cint*find_max(int*arr,intsize){if(arr==NULL||size<=0)returnNULL;int*max=arr;for(inti=1;i<size;i++){

温馨提示

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

最新文档

评论

0/150

提交评论