第49练 第9章 结构体指针《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
41人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第49练,内容涵盖第9章结构体与联合体的9.4 结构体指针。
《C语言程序设计》(电子工业出版社)一课一练 第49练
第9章 结构体与联合体
9.4 结构体指针
1、 单项选择题(本题共4小题)
1、已知struct Student s; struct Student *p = &s;,下列引用结构体成员 num 的方式中,正确的是( )
A. p.num
B. (*p) num
C. (*p).num
D. p->num []
2、若有结构体数组定义 struct Stu stu[3]; 和指针 struct Stu *p;,下列能让指针 p 指向数组第一个元素的正确赋值语句是( )
A. p = stu [0];
B. p = *stu;
C. p = &stu;
D. p = stu;
3、结构体指针 p 指向结构体数组的首元素后,执行p++操作,指针 p 会( )
A. 移动 1 个字节,指向当前元素的下一个字节
B. 移动一个结构体大小的字节数,指向数组的下一个元素
C. 保持原地址不变
D. 移动 4 个字节,无论结构体大小
4、下列关于结构体指针引用成员的两种方式(*p).num和p->num的关系,描述正确的是( )
A. 完全等价,功能相同
B. 语法不同,功能不同
C. 仅在指向结构体变量时等价,指向数组时不等价
D. 仅在指向数组时等价,指向变量时不等价
2、 判断题(本题共3题)
1、结构体指针 p 指向结构体数组时,执行p++操作,指针会移动 1 个字节的地址。( )
2、使用结构体指针引用成员时,(*p).name和p->name的功能完全等价,都能正确访问指针指向的结构体成员 name。( )
3、可以直接将结构体变量赋值给结构体指针,例如struct Student s; struct Student *p = s;是合法的。( )
3、 填空题(本题共2题)
1、已知结构体指针 p 指向某结构体变量,引用其成员 age 的两种指针形式分别是____和____。
2、若有定义struct Book book[5]; struct Book *p;,要让指针 p 指向结构体数组的第三个元素(下标为 2),正确的赋值语句是____。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Student {
int id;
char name[10];
};
int main() {
struct Student stu = {103, "ZhangSan"};
struct Student *p = &stu;
printf("ID: %d, Name: %s
", (*p).id, p->name);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第49练,内容涵盖第9章结构体与联合体的9.4 结构体指针。
《C语言程序设计》(电子工业出版社)一课一练 第49练
第9章 结构体与联合体
9.4 结构体指针
1、 单项选择题(本题共4小题)
1、已知struct Student s; struct Student *p = &s;,下列引用结构体成员 num 的方式中,正确的是( )
A. p.num
B. (*p) num
C. (*p).num
D. p->num []
【答案】C
【解析】结构体指针引用成员时,(*p)必须加括号(因为成员运算符.优先级高于*),然后用.访问成员,即(*p).num;也可以用p->num,选项中只有 C 格式正确,A、B、D 均存在语法错误。
2、若有结构体数组定义 struct Stu stu[3]; 和指针 struct Stu *p;,下列能让指针 p 指向数组第一个元素的正确赋值语句是( )
A. p = stu [0];
B. p = *stu;
C. p = &stu;
D. p = stu;
【答案】D
【解析】结构体数组名 stu 代表数组首地址,等价于第一个元素的地址,直接赋值给指针即可指向数组起始位置。
3、结构体指针 p 指向结构体数组的首元素后,执行p++操作,指针 p 会( )
A. 移动 1 个字节,指向当前元素的下一个字节
B. 移动一个结构体大小的字节数,指向数组的下一个元素
C. 保持原地址不变
D. 移动 4 个字节,无论结构体大小
【答案】B
【解析】结构体指针的加减运算会自动根据指向的结构体类型调整步长,p++会让指针移动整个结构体所占的字节数,直接指向数组的下一个元素,这是指针类型匹配的自动特性。
4、下列关于结构体指针引用成员的两种方式(*p).num和p->num的关系,描述正确的是( )
A. 完全等价,功能相同
B. 语法不同,功能不同
C. 仅在指向结构体变量时等价,指向数组时不等价
D. 仅在指向数组时等价,指向变量时不等价
【答案】A
【解析】(*p).num和p->num是结构体指针引用成员的两种等价写法,无论指针指向结构体变量还是结构体数组元素,二者的功能和执行结果完全一致,C 语言编译时会将它们解析为相同的访问逻辑。
2、 判断题(本题共3题)
1、结构体指针 p 指向结构体数组时,执行p++操作,指针会移动 1 个字节的地址。( )
【答案】×
【解析】结构体指针的步长由指向的结构体类型大小决定,p++会移动整个结构体所占的字节数,而非 1 个字节,目的是直接指向数组的下一个结构体元素。
2、使用结构体指针引用成员时,(*p).name和p->name的功能完全等价,都能正确访问指针指向的结构体成员 name。( )
【答案】√
【解析】这两种写法是 C 语言规定的结构体指针访问成员的等价形式,->是(*p).的简化写法,编译后执行逻辑完全相同,均可正确访问成员。
3、可以直接将结构体变量赋值给结构体指针,例如struct Student s; struct Student *p = s;是合法的。( )
【答案】×
【解析】结构体指针需要存储结构体变量的地址,正确的赋值方式是p = &s;,直接赋值结构体变量 s 会导致类型不匹配,编译报错。
3、 填空题(本题共2题)
1、已知结构体指针 p 指向某结构体变量,引用其成员 age 的两种指针形式分别是____和____。
【答案】(*p).age、p->age
【解析】(*p).age通过解引用指针得到结构体变量,再用成员运算符访问成员;p->age是 C 语言为结构体指针提供的简化访问语法,二者功能完全等价,是结构体指针访问成员的标准写法。
2、若有定义struct Book book[5]; struct Book *p;,要让指针 p 指向结构体数组的第三个元素(下标为 2),正确的赋值语句是____。
【答案】p = &book[2];(或p = book + 2;)
【解析】&book[2]直接获取数组第三个元素的地址,赋值给指针 p 即可让其指向该元素;book + 2通过数组首地址加偏移量(偏移 2 个结构体大小),同样能指向第三个元素,两种写法均符合语法规则。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Student {
int id;
char name[10];
};
int main() {
struct Student stu = {103, "ZhangSan"};
struct Student *p = &stu;
printf("ID: %d, Name: %s
", (*p).id, p->name);
return 0;
}
【答案】
程序运行结果:
ID: 103, Name: ZhangSan
【解析】
结构体指针 p 通过&stu指向结构体变量 stu,(*p).id和p->name分别用两种等价方式访问结构体成员,最终输出变量 stu 的 id 和 name 成员值。两种成员访问方式功能一致,均能正确获取指针指向的结构体成员数据。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$