内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第43练,内容涵盖第8章 指针的8.2指向简单变量的指针。
《编程语言基础-C语言》(高教版第5版)第43练
第8章 指针
8.2 指向简单变量的指针(原卷版)
一、单项选择题(本题共5小题)
1、若有定义 int *p, a=5;,则下列语句中能使指针变量p指向a的是( )
A. p = &a;
B. p = a;
C. *p = a;
D. p = *a;
2、若有定义 int a=5, *p=&a;,则以下选项中能输出变量a中5的是( )
A. printf("%d", &a);
B. printf("%d", p);
C. printf("%d", *p);
D. printf("%d", &p);
3、执行以下程序后,输出结果是( )
#include <stdio.h>
main() {
int x = 10, y = 20, *p;
p = &x;
*p = 30;
p = &y;
printf("%d,%d", x, *p);
}
A. 10,20
B. 10,30
C. 30,20
D. 30,30
4、以下关于指针变量说法正确的是( )
A. 指针变量定义后未初始化,其值为NULL。
B. 不同类型的指针变量,其所占内存大小不同。
C. 可以通过&运算符获取指针变量自身的地址。
D. 整型变量可以直接赋给指针变量。
5、使用const修饰符修饰指针变量时,若定义 const int *p;,以下描述正确的是( )
A. 指针变量p本身的值不能改变。
B. 指针变量p指向的变量的值不能通过p来改变。
C. p只能指向整型常量。
D. p既可以改变指向的变量,也可以改变指向变量的值。
二、判断题(本题共5小题)
1、指针变量中存放的是内存地址,通过该地址可以间接地访问内存单元中的数据,这种访问方式称为直接访问。( )
2、两个指针变量可以相加,但不能相乘和相除。( )
3、若有定义 int a=10, *p; p=&a;,则*和&是互逆运算,*&a等价于a,&*p等价于p。( )
4、若有定义 int x=2, y=3, *px=&x, *py=&y;,则可以通过*px=*py;将y的值赋给x。( )
5、若有定义 int a=5, *p=&a;,则执行p++;后,p中存放的地址数值增加了1。( )
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第43练,内容涵盖第8章 指针的8.2指向简单变量的指针。
《编程语言基础-C语言》(高教版第5版)第43练
第8章 指针
8.2 指向简单变量的指针(解析版)
一、单项选择题(本题共5小题)
1、若有定义 int *p, a=5;,则下列语句中能使指针变量p指向a的是( )
A. p = &a;
B. p = a;
C. *p = a;
D. p = *a;
【答案】A
【解析】&是取地址运算符,&a表示变量a在内存中的地址。
2、若有定义 int a=5, *p=&a;,则以下选项中能输出变量a中5的是( )
A. printf("%d", &a);
B. printf("%d", p);
C. printf("%d", *p);
D. printf("%d", &p);
【答案】C
【解析】变量a的值为5,指针p指向a,因此*p等价于a,其值为5。
3、执行以下程序后,输出结果是( )
#include <stdio.h>
main() {
int x = 10, y = 20, *p;
p = &x;
*p = 30;
p = &y;
printf("%d,%d", x, *p);
}
A. 10,20
B. 10,30
C. 30,20
D. 30,30
【答案】C
【解析】p = &x;使p指向x;*p = 30;通过指针p将x的值修改为30;接着p = &y;使p改为指向y;此时x的值已变为30,而*p是y的值20。因此输出结果为30,20。指针变量可以先后指向不同变量。
4、以下关于指针变量说法正确的是( )
A. 指针变量定义后未初始化,其值为NULL。
B. 不同类型的指针变量,其所占内存大小不同。
C. 可以通过&运算符获取指针变量自身的地址。
D. 整型变量可以直接赋给指针变量。
【答案】C
【解析】指针变量也是变量,在内存中有自己的存储单元,可以通过&(取地址符)获取其地址,因此C选项正确。
5、使用const修饰符修饰指针变量时,若定义 const int *p;,以下描述正确的是( )
A. 指针变量p本身的值不能改变。
B. 指针变量p指向的变量的值不能通过p来改变。
C. p只能指向整型常量。
D. p既可以改变指向的变量,也可以改变指向变量的值。
【答案】B
【解析】const int *p;表示指针p指向一个常量,通过p不能修改其指向的内容,但p本身的值(即指向的地址)可以改变。C选项错误,p可以指向普通的int变量,只是无法通过p修改它。D选项混淆了两种指针类型的区别。
二、判断题(本题共5小题)
1、指针变量中存放的是内存地址,通过该地址可以间接地访问内存单元中的数据,这种访问方式称为直接访问。( )
【答案】×
【解析】通过变量名直接引用变量的方式称为“直接访问”,而通过指针变量中存放的地址来引用变量的方式称为“间接访问”。
2、两个指针变量可以相加,但不能相乘和相除。( )
【答案】×
【解析】指针之间可以相减,但不能进行加法、乘法、除法运算。指针加法通常是通过指针与整数相加来实现的,两个指针相加没有实际意义,在语法上是不允许的。
3、若有定义 int a=10, *p; p=&a;,则*和&是互逆运算,*&a等价于a,&*p等价于p。( )
【答案】√
【解析】&是取地址运算符,*是指针运算符(解引用),二者互为逆运算。
4、若有定义 int x=2, y=3, *px=&x, *py=&y;,则可以通过*px=*py;将y的值赋给x。( )
【答案】√
【解析】*px代表px指向的变量x,*py代表py指向的变量y(值为3)。通过*px = *py;将*py的值3赋给*px,即赋值给变量x,因此x的值变为3。
5、若有定义 int a=5, *p=&a;,则执行p++;后,p中存放的地址数值增加了1。( )
【答案】×
【解析】p是一个指向int类型的指针。当执行p++时,指针的移动步长取决于其指向的数据类型所占的字节数(即sizeof(int))。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$