第8章 第44练 指向数组的指针变量《编程语言基础-C语言》(高教版第5版)一课一练

2026-05-08
| 2份
| 5页
| 44人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第44练,内容涵盖第8章 指针的8.3指向数组的指针变量。 《编程语言基础-C语言》(高教版第5版)第44练 第8章 指针 8.3 指向数组的指针变量(原卷版) 一、单项选择题(本题共5小题) 1、若有定义 int a[5] = {1,2,3,4,5}; 和 int *p;,则使 p 指向数组 a 的第一个元素的正确赋值语句是( ) A. p = a; B. p = &a[0]; C. p = &a; D. A和B都正确 2、若有定义 int a[5] = {10,20,30,40,50}, *p = a;,则 *(p+3) 的值是( ) A. 20 B. 30 C. 40 D. 50 3、以下程序段中,输出结果是( ) int a[3] = {1, 2, 3}; int *p = a; printf("%d,", *p++); printf("%d", *p); A. 1,2 B. 2,2 C. 1,1 D. 2,3 4、若定义 int a[4] = {2,4,6,8}, *p = &a[2];,则 p[-1] 的值是( ) A. 2 B. 4 C. 6 D. 8 5、以下关于数组名和指针的说法,正确的是( ) A. 数组名是一个指针常量,不能被赋值 B. 数组名与指向数组首元素的指针完全相同,可以相互赋值 C. 对数组名进行自增运算是合法的 D. 数组名和指针变量都占用4个字节(32位系统) 二、判断题(本题共5小题) 1、执行 int a[5], *p = a; 后,表达式 p+1 和 a+1 都表示数组第二个元素的地址,并且两者值相同。( ) 2、通过指针引用数组元素时,*(p+i) 与 p[i] 完全等价,但 p[i] 的写法更简洁直观。( ) 3、若有定义 int a[10], *p = a;,则 p[10] 引用的是数组的第11个元素,已经越界,但编译器不会报错,运行可能导致未知错误。( ) 4、指向数组元素的指针变量支持关系运算,用于比较两个指针所指向的位置关系,前提是它们指向同一数组。( ) 5、若有定义 int a[3][4];,则定义指向一维数组的指针变量时,正确的语句是 int *p[4];。( ) 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第44练,内容涵盖第8章 指针的8.3指向数组的指针变量。 《编程语言基础-C语言》(高教版第5版)第44练 第8章 指针 8.3 指向数组的指针变量(解析版) 一、单项选择题(本题共5小题) 1、若有定义 int a[5] = {1,2,3,4,5}; 和 int *p;,则使 p 指向数组 a 的第一个元素的正确赋值语句是( ) A. p = a; B. p = &a[0]; C. p = &a; D. A和B都正确 【答案】D 【解析】数组名 a 在表达式中代表数组首元素的地址,即 &a[0]。因此 p = a; 和 p = &a[0]; 都是正确的。2、若有定义 int a[5] = {10,20,30,40,50}, *p = a;,则 *(p+3) 的值是( ) A. 20 B. 30 C. 40 D. 50 【答案】C 【解析】p 指向 a[0],p+3 指向 a[3](指针移动3个元素),*(p+3) 即 a[3] 的值40。 3、以下程序段中,输出结果是( ) int a[3] = {1, 2, 3}; int *p = a; printf("%d,", *p++); printf("%d", *p); A. 1,2 B. 2,2 C. 1,1 D. 2,3 【答案】A 【解析】*p++ 等价于 *(p++),即先取 *p(值为1),然后 p 自增指向下一个元素。第一个输出1;此时 p 指向 a[1],第二个输出 *p 为2。结果:1,2。注意后缀 ++ 优先级高于 *,但后置自增先返回原值再自增,因此先取值后移动指针。 4、若定义 int a[4] = {2,4,6,8}, *p = &a[2];,则 p[-1] 的值是( ) A. 2 B. 4 C. 6 D. 8 【答案】B 【解析】p 指向 a[2](值为6),p[-1] 等价于 *(p-1),指向 a[1],值为4。C语言中指针可以用负下标访问前面的元素,只要不越界。 5、以下关于数组名和指针的说法,正确的是( ) A. 数组名是一个指针常量,不能被赋值 B. 数组名与指向数组首元素的指针完全相同,可以相互赋值 C. 对数组名进行自增运算是合法的 D. 数组名和指针变量都占用4个字节(32位系统) 【答案】A 【解析】数组名是一个地址常量,它代表数组首元素的地址,不能出现在赋值运算符的左侧(不能自增或赋值)。 二、判断题(本题共5小题) 1、执行 int a[5], *p = a; 后,表达式 p+1 和 a+1 都表示数组第二个元素的地址,并且两者值相同。( ) 【答案】√ 【解析】p 指向 a[0],p+1 指向下一个元素 a[1]。数组名 a 代表首地址,a+1 也是 a[1] 的地址。两者值相等,类型也相同(都是 int *)。所以正确。 2、通过指针引用数组元素时,*(p+i) 与 p[i] 完全等价,但 p[i] 的写法更简洁直观。( ) 【答案】√ 【解析】C语言规定 p[i] 与 *(p+i) 等价,编译器会按照指针运算处理。这是数组下标运算的本质。因此两种写法完全等价,通常使用 p[i] 更符合数组的习惯用法。 3、若有定义 int a[10], *p = a;,则 p[10] 引用的是数组的第11个元素,已经越界,但编译器不会报错,运行可能导致未知错误。( ) 【答案】√ 【解析】C语言不检查数组越界,p[10] 在语法上等价于 *(p+10),访问了数组范围之外的内存。编译可通过,但运行时可能发生段错误或篡改其他数据,应避免。 4、指向数组元素的指针变量支持关系运算,用于比较两个指针所指向的位置关系,前提是它们指向同一数组。( ) 【答案】√ 【解析】指向同一数组的两个指针可以进行比较(<、>、==等),结果取决于它们在数组中的先后顺序。 5、若有定义 int a[3][4];,则定义指向一维数组的指针变量时,正确的语句是 int *p[4];。( ) 【答案】× 【解析】int *p[4]; 定义的是指针数组,即包含4个 int * 元素的数组。要定义指向二维数组行(即一维数组)的指针变量,应使用 int (*p)[4];,表示 p 是一个指针,指向包含4个整型元素的一维数组。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第8章 第44练 指向数组的指针变量《编程语言基础-C语言》(高教版第5版)一课一练
1
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。