没有合适的资源?快使用搜索试试~ 我知道了~
(完整word版)C语言指针练习题解析.doc
5星 · 超过95%的资源 7 下载量 25 浏览量
2022-11-16
17:43:29
上传
评论 2
收藏 100KB DOC 举报
温馨提示
试读
28页
(完整word版)C语言指针练习题解析.doc
资源推荐
资源详情
资源评论
(完整 word 版)C 语言指针练习题解析
一、知识点
1. 掌握指针、地址、指针类型、空指针(NULL)等概念;
2. 掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表
达式;
3. 掌握指针与数组、函数、字符串等的联系;
4. 掌握动态空间操作(new,delete);
5. 掌握引用参数的使用。
二、例题分析与解答
例题 1:若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;
A.声明变量 p,其中*表示 p 是一个指针变量
B.变量 p 经初始化,获得变量 a 的地址
C.变量 p 只可以指向一个整形变量
D.变量 p 的值为 100
答案:D
分析:有指针变量定义可知 A、C 说法是正确的,故不能选.在语句中&p=a,表示指针变量取得变量 a 地址,B
说法也正确,也不能选择。D 中不能说变量 p 的值为 100,应该*p 的值为 100,所以选择 D。
例题 2:若有以下定义,则赋值正确的是( )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
答案:C
分析:指针变量使用规定,不同类型的指针变量不能赋值,也不能取得普通变量地址,故 A、B 不正确,不能
选择.因为 q 是 float 类型指针变量,不能申请 int 类型地址,D 不正确,也不能选择.因为任何类型的指针
变量都能取得 NULL 指针,所以 C 正确。
(完整 word 版)C 语言指针练习题解析
例题 3:如果 x 是整型变量,则合法的形式是( ).
A.&(x+5) B.*x C.&*x D.*&x
答案:D
分析:因为 C++语言表达式没有地址,A 不正确.C++语言普通变量不能用*运算,因此 B 和 C 也不正确。&x 表示
变量 x 的地址,*&x 是 x 地址的值,所以 D 正确。
(完整 word 版)C 语言指针练习题解析
例题 4:若要建立如下关系,错误的语句组是( ).
span style=’mso—ignore:vglayout; ;z—index:1;left:0px;margin-left:144px;margin—top:
1px; width:256px;height:38px'
A. B. C. D.
int *p=&x, x; int x, p=&x; int *p, x=10; int *p, x;
*p=10; *p=10; *p=&x; p=&x ; x=10;
答案:A
分析:在变量类型说明语句中 *表示变量是指针变量,在其他语句中,*称为指针运算,用于访问指针所指向
的对象的值,&称为取地址运算,用来得到一个对象的地址。故 B、C、D 都是正确的,不能选择.A 中指针变量
p 取不到 x 地址,因为 x 还没有定义,所以选择 A。
例题 5:若有语句 int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对 a 数组元素的正确引
用(其中 0≤i〈10).
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
答案:B
分析:指针就变量 p 取得数组 a 的首地址,由指针与数组关系知,p[i]表示数组元素第 i+1 元素值,p[i]=a[i]
正确,故 A 不能选.*(a+i)表示一维数组 a 第 i+1 元素值,*(*(a+i)表示对第 i+1 元素值再取值是错误操
作,所以选 B。a[p-a]=a[0]正确,故不能选择 C。*(&a[i])也正确(见上题),也不能选 D。
例题 6:写出下列程序运行结果是( )。
#include
void main()
{
char ch[3][4]={“AAA”,”BB”,”CCC”},(*q)[4]=ch, *p;
// ch 是二维数组, q 是指向一维数组指针,并且一维数组每行只有 4 个字符
//q 并取得二维数组 ch 首地址
int i;
p=new char; //申请地址
(完整 word 版)C 语言指针练习题解析
*p=’b’; //装入字符 b
*(*q+3)=*p;
for(i=0;i<3;i++) cout<<Q[I]<<ENDL;〈 SPAN>
}
A. B. C. D.
AAAbBB AAAb AAA AAA
BB BB bBB BB
CCC CCC CCC CCC
答案:A
分析:二维字符数组初始化后值如下表:
0
1
2
3
0
A
A
A
\0
1
B
B
\0
2
C
C
C
\0
执行语句*(*q+3)=*p 后二维字符数组值:
0
1
2
3
0
A
A
A
b
1
B
B
\0
2
C
C
C
\0
在输出语句中 q[0]输出是 AAAbBB,q[1]输出是 BB,q[2]输出 CCC,只能选择 A。
例题 7:写出下列程序运行结果:
#include
void main()
{int *pn, n=10,m=20;
float *pf, px=3.14159,py=2。71828;
pn=&n;
*pn+=m;
(完整 word 版)C 语言指针练习题解析
cout<<”n 现在的值是: "〈〈*pn<〈ENDL;< SPAN>
pf=&px;
py+=5*(*pf);
cout〈<"py 现在的值是:”〈<PY〈<ENDL;< SPAN〉
}
运行结果是:
n 现在的值是: 30
pf 现在的值是:18.4262
分析:指针是通过在变量前加一个“*”来定义,使用用“*"加变量名存取指针所指的值,用运算“&”取变量
的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。
例题 8:写出下列程序运行结果:
#include
void main()
{int I,*p,a[]={10,20,30,40,50,60};
p=a;
for(I=0;I〈5;I++)
cout〈<”a[“〈〈I〈〈〈A[I]<〈’\T’〈<”*(A+"<<I<<〈*(A+I)〈 SPAN>
<〈'\t'〈〈"*(p+”〈<I<<<*(P+I)〈<’\T’〈<"P[“〈〈I<<〈P[I]<<ENDL;〈 SPAN〉
}
运行结果:
a[0]=10 *(a+0)=10 *(p+0)=10 p[0]=10
a[1]=20 *(a+1)=20 *(p+1)=20 p[1]=20
a[2]=30 *(a+2)=30 *(p+2)=30 p[2]=30
a[3]=40 *(a+3)=40 *(p+3)=40 p[3]=40
a[4]=50 *(a+4)=50 *(p+4)=50 p[4]=50
a[5]=60 *(a+5)=60 *(p+5)=60 p[5]=60
剩余27页未读,继续阅读
Mmnnnbb123
- 粉丝: 677
- 资源: 8万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- tensorflow-gpu-2.7.4-cp37-cp37m-manylinux2010-x86-64.whl
- 多段线、 圆、弧转多段线(仅我可见)
- tensorflow-2.7.2-cp38-cp38-manylinux2010-x86-64.whl
- yeyue-p8Yi4-ve4a83792.apk
- tensorflow-gpu-2.7.3-cp38-cp38-manylinux2010-x86-64.whl
- 五相感应电机矢量控制模型MATLAB
- RGLED (1) (1).circ
- IMG_20240427_215747.jpg
- python下前端WEB学习笔记
- 田间种植行排号自动生成工具
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页