第32练 8.1-8.2 指针概念、指向简单变量的指针变量 《C语言》 (第五版) 一课一练 (山东省)

2026-06-24
| 2份
| 10页
| 2人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 作业-同步练
知识点 C语言概述
使用场景 同步教学
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 107 KB
发布时间 2026-06-24
更新时间 2026-06-24
作者 xkw_068401954
品牌系列 上好课·一课一练
审核时间 2026-06-24
下载链接 https://m.zxxk.com/soft/58480047.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第32练,内容是8.1-8.2 指针概念、指向简单变量的指针变量。 《C语言》(第五版)一课一练 第32练 8.1-8.2 指针概念、指向简单变量的指针变量 一、单选题 1. 以下关于C语言指针的叙述中,正确的是( ) A. 指针变量中存储的是另一个变量的内存地址 B. 指针变量中存储的是另一个变量的值 C. 指针变量本身没有地址 D. 所有类型的指针变量占用不同的字节数 【答案】A 【解析】指针变量是一种特殊的变量,其存储的内容是另一个变量的内存地址。B错误,指针存储的是地址而非值。C错误,指针变量本身也是变量,有自己的内存地址。D错误,在同一系统中所有指针变量占用的字节数相同(与地址总线宽度有关),与指向的类型无关。 2. 设有定义 int a=5, *p=&a; 则以下表达式中,值为5的是( ) A. p B. &a C. *p D. &p 【答案】C 【解析】*p是间接访问运算,通过指针p中存储的地址访问所指向的变量a,得到a的值5。A中p存储的是a的地址,不是5。B中&a是取a的地址。D中&p是取指针变量p自身的地址。*和&是一对互逆运算:*&a等价于a,&*p等价于p。 3. 以下能正确定义指针变量p并使其指向整型变量a的是( ) A. int a=3, p=&a; B. int a=3, *p=a; C. int *p=&a, a=3; D. int a=3, *p=&a; 【答案】D 【解析】D中*p=&a在定义指针p的同时用a的地址初始化,正确。A中p没有*号,p是整型变量而非指针,不能存储地址。B中*p=a将a的值3赋给p,但p应该存储地址而不是整数3。C中变量a在使用前未定义,定义顺序错误(a应先定义再使用)。 4. 设有定义 int a=10, b=20, *p=&a; 执行 *p=b; 后,以下叙述正确的是( ) A. a和b的值都变为20 B. p指向了变量b C. a的值变为20,b的值不变 D. a的值不变,仍为10 【答案】C 【解析】*p=b通过指针p间接修改p所指向的变量a的值,将a改为20。此时a=20,b=20。但b的值是原来的20,并未被修改。p仍然指向a,没有改变指向。若要p指向b,应写p=&b而不是*p=b。 5. 设有定义 int x=100, *p1=&x, **p2=&p1; 则**p2的值是( ) A. 100 B. x的地址 C. p1的地址 D. 不确定 【答案】A 【解析】p1是一级指针,存储x的地址,*p1访问x的值100。p2是二级指针(指向指针的指针),存储p1的地址。*p2访问p1的内容(即x的地址),**p2= *(*p2)先得到p1的内容(x的地址),再间接访问得到x的值100。 6. 以下选项中,存在语法错误的是( ) A. int a=1; int *p=&a; float *q=NULL; B. int a=1; int *p=&a; int **q=&p; C. int a=1; int *p; p=&a; D. int a=1; float *p=&a; 【答案】D 【解析】D中将整型变量a的地址赋给浮点型指针p,类型不匹配,int*与float*是不同的指针类型,不能直接赋值。A中p指向int、q指向float各自正确,NULL可以赋给任何指针类型。B中二级指针q存储一级指针p的地址,类型匹配。C中先定义指针p再赋值,分两步完成,语法正确。 7. 设有定义 int a=3, *p=&a, b; 执行 b=(*p)++; 后,a和b的值分别是( ) A. a=3, b=3 B. a=4, b=3 C. a=4, b=4 D. a=3, b=4 【答案】B 【解析】(*p)++先取*p的值(即a的值3)赋给b,然后a自增为4。注意(*p)++与*p++的区别:(*p)++是对p指向的变量做后置++,*p++是先取*p的值然后p本身++。b得到的是自增前的值3,a自增后变为4。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> main() { int a = 10, b = 20; int *p1 = &a, *p2 = &b; *p1 = *p1 + *p2; *p2 = *p1 - *p2; *p1 = *p1 - *p2; printf("a=%d, b=%d ", a, b); printf("*p1=%d, *p2=%d ", *p1, *p2); } 【答案】a=20, b=10 *p1=20, *p2=10 【解析】程序通过指针实现a和b的交换。初始*p1=10,*p2=20。*p1=*p1+*p2=10+20=30,此时a=30。*p2=*p1-*p2=30-20=10,此时b=10。*p1=*p1-*p2=30-10=20,此时a=20。最终a=20,b=10,完成了交换。*p1和*p2分别与a和b的值相同。 三、案例分析题 9. 以下程序的功能是通过指针变量输入两个整数,并按从大到小的顺序输出。请填空。 #include <stdio.h> main() { int a, b; int *p1 = 【1】, *p2 = &b; int *t; printf("请输入两个整数:"); scanf("%d%d", p1, p2); if (*p1 < *p2) { t = p1; p1 = p2; 【2】; } printf("%d %d ", 【3】); } 【答案】【1】&a 【2】p2=t 【3】*p1,*p2 【解析】【1】p1应指向变量a,初始化为&a。【2】交换指针p1和p2的指向,使p1指向较大值,三步交换:t=p1,p1=p2,p2=t。【3】输出时应对指针解引用,*p1输出较大值,*p2输出较小值。注意这里是交换指针的指向,而不是交换变量的值。 四、综合应用题 10. 编写一个C程序:定义一个函数swap,使用指针参数实现两个整型变量的值交换。在main函数中定义两个整型变量并初始化,调用swap函数交换它们的值,输出交换前后的结果。 【答案】#include <stdio.h> void swap(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = t; } main() { int a = 3, b = 5; printf("交换前:a=%d, b=%d ", a, b); swap(&a, &b); printf("交换后:a=%d, b=%d ", a, b); } 【解析】swap函数接收两个指针参数,通过间接访问修改main函数中的变量a和b。调用swap(&a,&b)传递a和b的地址,函数内通过*p1和*p2间接操作a和b实现交换。如果swap使用值传递(不用指针),函数内交换不会影响实参,这就是指针作为函数参数的核心价值。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第32练,内容是8.1-8.2 指针概念、指向简单变量的指针变量。 《C语言》(第五版)一课一练 第32练 8.1-8.2 指针概念、指向简单变量的指针变量 一、单选题 1. 以下关于C语言指针的叙述中,正确的是( ) A. 指针变量中存储的是另一个变量的内存地址 B. 指针变量中存储的是另一个变量的值 C. 指针变量本身没有地址 D. 所有类型的指针变量占用不同的字节数 2. 设有定义 int a=5, *p=&a; 则以下表达式中,值为5的是( ) A. p B. &a C. *p D. &p 3. 以下能正确定义指针变量p并使其指向整型变量a的是( ) A. int a=3, p=&a; B. int a=3, *p=a; C. int *p=&a, a=3; D. int a=3, *p=&a; 4. 设有定义 int a=10, b=20, *p=&a; 执行 *p=b; 后,以下叙述正确的是( ) A. a和b的值都变为20 B. p指向了变量b C. a的值变为20,b的值不变 D. a的值不变,仍为10 5. 设有定义 int x=100, *p1=&x, **p2=&p1; 则**p2的值是( ) A. 100 B. x的地址 C. p1的地址 D. 不确定 6. 以下选项中,存在语法错误的是( ) A. int a=1; int *p=&a; float *q=NULL; B. int a=1; int *p=&a; int **q=&p; C. int a=1; int *p; p=&a; D. int a=1; float *p=&a; 7. 设有定义 int a=3, *p=&a, b; 执行 b=(*p)++; 后,a和b的值分别是( ) A. a=3, b=3 B. a=4, b=3 C. a=4, b=4 D. a=3, b=4 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> main() { int a = 10, b = 20; int *p1 = &a, *p2 = &b; *p1 = *p1 + *p2; *p2 = *p1 - *p2; *p1 = *p1 - *p2; printf("a=%d, b=%d ", a, b); printf("*p1=%d, *p2=%d ", *p1, *p2); } 三、案例分析题 9. 以下程序的功能是通过指针变量输入两个整数,并按从大到小的顺序输出。请填空。 #include <stdio.h> main() { int a, b; int *p1 = 【1】, *p2 = &b; int *t; printf("请输入两个整数:"); scanf("%d%d", p1, p2); if (*p1 < *p2) { t = p1; p1 = p2; 【2】; } printf("%d %d ", 【3】); } 四、综合应用题 10. 编写一个C程序:定义一个函数swap,使用指针参数实现两个整型变量的值交换。在main函数中定义两个整型变量并初始化,调用swap函数交换它们的值,输出交换前后的结果。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第32练 8.1-8.2 指针概念、指向简单变量的指针变量 《C语言》 (第五版) 一课一练 (山东省)
1
第32练 8.1-8.2 指针概念、指向简单变量的指针变量 《C语言》 (第五版) 一课一练 (山东省)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。