没有合适的资源?快使用搜索试试~ 我知道了~
C语言程序设计题库 第九章:指针
1 下载量 125 浏览量
2023-08-29
19:14:01
上传
评论 2
收藏 1.25MB PDF 举报
温馨提示
试读
21页
为什么需要指针? 指针解决了一些编程中基本的问题。 第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。 第二,指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。 第三,有些操作必须使用指针。如操作申请的堆内存。还有:C语言中的一切函数调用中,值传递都是“按值传递”的,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。 指针是什么? 我们指知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。 通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char
资源推荐
资源详情
资源评论
第九章:指针
一、单选题
1、以下叙述中正确的是
A、即使不进行强制类型转换,在进行指针赋值运算时,指针变量的类型也可以不同
B、如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息
C、设变量 p 是一个指针变量,则语句 p=0;是非法的,应该使用 p=NULL;
D、指针变量之间不能用关系运算符进行比较
解析:答案选 B
A、一个指针变量只能指向同一种数据类型的变量,即类型要一致,如果类型不同,需要强
制类型转换才行。选项 A 错误。
B、在 C 语言中,空指针表示不指向任何地址空间,如果访问一个空指针,将会运行出错。
选项 B 正确。
C、要使一个指针变量指向为空,p=0 或 p=NULL;后一种要求#include <stdio.h>。选项 C 错
误。
D、指针变量可以用关系运算符进行比较。选项 D 错误。
2、以下程序段完全正确的是
A、int *p; scanf("%d", &p);
B、int *p; scanf("%d", p);
C、int k, *p=&k; scanf("%d", p);
D、int k, *p; *p=&k; scanf("%d", p);
解析:答案选
选项 A、B 中只定义了指针变量 p,没有指向,不能用 scanf 语句赋值,而且 A 中的 scanf 语
句的 p 已经是变量地址,不需要&运算符。选项 A 错误。
C、此处*p=&k 表示定义了指针变量 p,并对 p 初始化,p 指向变量 k。选项 C 正确。
D、*p=&k;此语句中的*p 表示的是 p 指向的变量,&k 表示的是 k 的地址,两端数据类型不一
致,应该改成 p=&k。选项 D 错误。
3、执行下面程序后,变量 a 的值为________。
int *p, a, b=2;
p=&a; *p=10; a=*p+b;
A、13
B、12
C、11
D、编译错误
解析:答案为 B
代码讲解:p 为指向变量 a 的地址,因此解引用操作*p=a,执行完*p=10;之后,a=10,a=*p+b;
等同于 a=a+b=2+10=12。选项 B 正确。
程序运行结果:
4、若有定义语句:int year=2015,*p=&year;以下不能使变量 year 中的值增至 2016 的语
句是( )。
A、*p+=1;
B、(*p)++;
C、++(*p);
D、*p++;
解析:答案为 D
A、*p+=1;等同于*p=*p+1;。选项 A 正确。
B、(*p)++;,对指针 p 指向的整型变量进行自增。选项 B 正确。
C、++(*p);,对指针 p 指向的整型变量进行自增。选项 C 正确。
D、*p++;自增操作符比解引用操作符优先级高,但是此处的++是后置++,因此先执行解引用
操作,指针 p 再自增 1,并不能改变变量 year 中的值,而是改变了 p 这个指针变量。选项
D 错误。
5、以下程序
#include <stdio.h>
void fun(int a)
{ int b=2;
a=b; a =a * 2; printf("%d,",a);
}
int main()
{ int k=3;
fun(k); printf("%d\n", k); return 0;
}则程序的输出结果是________。
A、4,3
B、4,4
C、6,3
D、6,6
解析:答案选 A
代码讲解:函数 fun()中的形参 a 为动态局部变量,当函数被调用时,函数调用时,形参和
实参的关系为单向值传递,即:实参的值传递给形参。因此形参 a 的初值为 k 的值,在函数
中赋值为 b 的值 2,并被修改为 4,所以其输出为 4,主函数中 k 的值根据形参和实参单向
传值调用关系,其值不变为 3。选项 A 正确。
程序运行结果:
6、以下程序
#include <stdio.h>
void fun(int *a)
{ int b=2;
a=&b; *a = *a * 2; printf("%d,", *a);
}
int main( )
{ int k=3, *p=&k;
fun(p); printf("%d,%d\n", k, *p); return 0;
}则程序的输出结果是________。
A、4,3,3
B、4,3,4
C、6,3,6
D、6,6,6
解析:答案选 A
代码讲解:函数 fun()的形参为局部指针类型,主函数中的指针变量 p 指向 k,当调用 fun
函数时,根据形参与实参的关系,实参的值传递给形参,此时形参 a=p,即 a 也指向变量 k,
但是在函数 fun 中,a 的指向改变了,指向 b,因此*a 修改的是 b 的值为 4,fun()中输出 b
的值 4,主函数中 k 的值没有改变,因此输出 k 和*p 都为 3。选项 A 正确。
程序运行结果:
7、有以下程序
#include <stdio.h>
void fun (int *p)
{ printf ("%d\n", p[5]); }
int main( )
{ int a[10]= {1,2,3,4,5,6,7,8,9,10};
fun(&a[3]);
return 0;
}程序运行后的输出结果是________
A、5
B、6
C、8
D、9
解析:答案选 D
代码思路:fun()函数传址调用,传递的是 a[3]的地址,因此在函数中的数组首元素地址是
a[3]的地址,所以 p[5]=a[8]=9,因此打印:9。
程序运行结果:
8、有以下程序
#include<stdio.h>
int main( )
{ int a[]={1, 2, 3, 4, 5} ;
int x, y, *p;
p=a;
x=*(p+2);
printf("%d:%d \n", *p, x);
return 0;
}程序运行后的输出结果是________。
A、1:3
B、1:1
C、3:3
D、3:1
解析:答案选 A
代码讲解:p 为指向数组 a 首元素的指针,数组中,指针加 1 减 1 会跳过一个数组元素类型
的大小,因此 p+2 为指向 a[2]的地址,而 p 的值并未发生改变,所以*p=a[0]=1,
x=*(p+2)=a[2]=3,所以打印:1:3。
程序运行结果:
9、有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun(int *p1,int *p2,int *s )
{ int c;
s=&c;
*s = *p1 + *(p2++);
}
int main()
{ int a[2]={1,2 }, b[2]={10,20}, *s=a;
fun( a,b,s ); printf("%d\n", *s ); return 0;
}程序运行后的输出结果是________。
A、11
B、10
C、1
D、2
解析:答案选 C
代码讲解:主函数中的指针变量 s 指向数组 a 第一个元素 a[0],此时*s 的值为 1,函数 fun()
的三个参数均为指针变量,当被调用时,把 a,b 和 s 的值分别传值给形参 p1,p2 和 s。在函
数 fun 中,形参 s 与实参 s 是不同的指针变量,其初始指向为指向 a[0],但语句 s=&c;使其
指向发生变化,指向局部变量 c,因此 fun()函数中的*s 改变的是 c 的值,而不能改变 a[0]
的值,因此,主函数中*s 的值(即 a[0]的值)没有被改变,输出还是为 1。
程序运行结果:
10、下面程序的运行结果是________。
int main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,10},*p=a+5;
printf("%d",*--p); return 0;
}
A、4
B、a[4]的地址
C、3
D、5
解析:答案选 D
代码讲解:指针加 1 减 1 会跳过一个数组元素类型的大小,因此—p 使指针的指向由 a[5]改
变为指向 a[4],然后解引用,因此打印:5。选项 D 正确。
程序运行结果:
剩余20页未读,继续阅读
资源评论
一直学不会编程的小徐
- 粉丝: 61
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 筷手引流工具.apk
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功