第44练 第8章 指针与二维数组《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
6页
|
38人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第44练,内容涵盖第8章指针的8.3.2 指针与二维数组。
《C语言程序设计》(电子工业出版社)一课一练 第44练
第8章 指针
8.3.2 指针与二维数组
1、 单项选择题(本题共4小题)
1、已知int b[2][2];,下列表达式中与b[1][1]等价的是( )
A. *(b[1]+1)
B. *(b+1+1)
C. b+1+1
D. *b[1+1]
【答案】A
【解析】根据二维数组的指针访问规则,b[i]+j是第 i 行第 j 列元素的地址,*(b[i]+j)等价于b[i][j],因此*(b[1]+1)就是b[1][1];选项 B 是对第 2 行首地址取值,无意义;选项 C 是第 2 行首地址,不是元素值;选项 D 中b[2]超出数组范围,错误。
2、要定义一个指向int型 2 列二维数组的指针变量p,正确的定义语句是( )
A. int *p[2];
B. int (*p)[2];
C. int p[2][2];
D. int *p;
【答案】B
【解析】指向二维数组的指针变量定义必须加括号(*p),表示p是指针,[2]表示指向的一维数组长度(即二维数组列数);选项 A 是指针数组,每个元素是int型指针;选项 C 是普通二维数组;选项 D 是普通 int 型指针,均不符合要求。
3、对于二维数组int b[2][2],表达式b[0]的含义是( )
A. 第 0 行第 0 列元素的值
B. 第 0 行的首地址
C. 第 0 行第 0 列元素的地址
D. 整个二维数组的首地址
【答案】C
【解析】根据知识点,b[i]等价于*(b+i),也等价于&b[i][0],即第 i 行第 0 列元素的地址;选项 A 需要用*b[0]获取;选项 B 是b+0的含义;选项 D 是b的含义。
4、已知二维数组int b[2][2]的首地址是 3000(int型占 2 字节),表达式b+1的地址值是( )
A. 3001
B. 3002
C. 3004
D. 3006
【答案】C
【解析】b+i表示第 i 行的首地址,一行有 2 个int型元素,共占2*2=4字节,因此b+1的地址为3000+4=3004;指针偏移量由行的总字节数决定,不是单个元素的字节数。
2、 判断题(本题共3题)
1、定义指向二维数组的指针变量时,(*p)中的括号可以省略,写成int *p[2];也能实现相同功能。( )
【答案】×
【解析】省略括号后int *p[2];定义的是指针数组,每个元素是int型指针,和指向二维数组的行指针意义完全不同,括号是区分两者的关键,不能省略。
2、对于二维数组int b[2][2],表达式b和b[0]的地址值相同,但代表的含义不同。( )
【答案】√
【解析】b是行指针,指向整个第 0 行;b[0]是列指针,指向b[0][0],两者的地址值都是数组的首地址,但类型和指向的对象不同,含义有区别。
3、表达式*(b+i)和b[i]都是表示第 i 行第 0 列元素的值。( )
【答案】×
【解析】*(b+i)等价于b[i],表示的是第 i 行第 0 列元素的地址,要获取元素值需要在前面加*,即*b[i]或**(b+i)才是b[i][0]的值。
3、 填空题(本题共2题)
1、定义一个指向float型、列数为 3 的二维数组的指针变量p,正确的定义语句是____。
【答案】float (*p)[3];
【解析】该定义符合二维数组指针变量的规范格式,括号确保p是指针类型,[3]表示指针指向的一维数组长度(即二维数组的列数)。这个格式能让p正确指向列数为 3 的float型二维数组的行首地址。
2、对于二维数组int b[3][4],表达式b+2等价于____,表示的是二维数组第 2 行的首地址。
【答案】&b[2]
【解析】根据二维数组的地址规则,b+i和&b[i]是等价的,两者都表示第 i 行的首地址。它们的类型都是行指针,指向的是整个一维数组(一行元素)。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
int b[2][2] = {{0,1},{6,8}};
int (*p)[2] = b;
printf("%d, %d", *(*p+1), *(*(p+1)+1));
return 0;
}
【答案】
程序运行结果:
1, 8
【解析】
p是指向 2 列二维数组的行指针,初始指向数组第 0 行;*p+1是第 0 行第 1 列元素的地址,*(*p+1)取值为 1。p+1指向数组第 1 行,*(p+1)+1是第 1 行第 1 列元素的地址,*(*(p+1)+1)取值为 8,因此最终输出对应结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第44练,内容涵盖第8章指针的8.3.2 指针与二维数组。
《C语言程序设计》(电子工业出版社)一课一练 第44练
第8章 指针
8.3.2 指针与二维数组
1、 单项选择题(本题共4小题)
1、已知int b[2][2];,下列表达式中与b[1][1]等价的是( )
A. *(b[1]+1)
B. *(b+1+1)
C. b+1+1
D. *b[1+1]
2、要定义一个指向int型 2 列二维数组的指针变量p,正确的定义语句是( )
A. int *p[2];
B. int (*p)[2];
C. int p[2][2];
D. int *p;
3、对于二维数组int b[2][2],表达式b[0]的含义是( )
A. 第 0 行第 0 列元素的值
B. 第 0 行的首地址
C. 第 0 行第 0 列元素的地址
D. 整个二维数组的首地址
4、已知二维数组int b[2][2]的首地址是 3000(int型占 2 字节),表达式b+1的地址值是( )
A. 3001
B. 3002
C. 3004
D. 3006
2、 判断题(本题共3题)
1、定义指向二维数组的指针变量时,(*p)中的括号可以省略,写成int *p[2];也能实现相同功能。( )
2、对于二维数组int b[2][2],表达式b和b[0]的地址值相同,但代表的含义不同。( )
3、表达式*(b+i)和b[i]都是表示第 i 行第 0 列元素的值。( )
3、 填空题(本题共2题)
1、定义一个指向float型、列数为 3 的二维数组的指针变量p,正确的定义语句是____。
2、对于二维数组int b[3][4],表达式b+2等价于____,表示的是二维数组第 2 行的首地址。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
int b[2][2] = {{0,1},{6,8}};
int (*p)[2] = b;
printf("%d, %d", *(*p+1), *(*(p+1)+1));
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$