目录
上一篇复习了一维数组,这一篇我们来复习二维数组 。
说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。
这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。
注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!
vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。
我们正式开始:
数组
数组分为:
一维数组
二维数组
字符数组(笔试重点)
上一篇复习了一维数组,我们现在来看二维数组
二维数组
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
例如:float a[3][4],b[5][10];
定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。
二维数组的初始化
1、分行给二维数组赋初值。
例如: int a[2][3]={{1,2,3},{4,5,6}}; //最正规的写法
2、可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
例如:int a[2][3]={1,2,3,4,5,6}; //编译会报警告
3、可以对部分元素赋初值。
例如:
int a[2][3]={{1}, {5}, {9}}; //没有赋值的为0
int a[2][3]={{1}, {2, 3}};
4、如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。即行可以省,列不可以省。
例如:int a[2][3]={1, 2, 3, 4, 5, 6};
等价于:int a[ ][3]={1, 2, 3, 4, 5, 6};
5、二维数组初始化为全0,int a[2][3]={{0},{0}};有些编译器还支持写成int a[2][3]={0};
遍历二维数组
int a[3][4];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",a[i][j])
}
printf("\n");
}
二维数组的数组名
1、数组名a表示首行地址 ,即0x100,a + 1 = 0x110;(加1就到了下一行的地址)
2、a[0] (也可以写成 a[0][0] ) 表示首行首元素地址 ,即0x100,a[0] + 1 = 0x104;(加1就到了当行的第二个元素的地址);注意a[0]表示首行首元素的地址,a[1]表示第二行首元素的地址,以此类推
3、&a表示数组地址 ,即0x100,&a + 1 = 0x12C。(加1跨越了整个数组)
笔试题11
数组a[3][4],哪个不能表示a[1][1]的地址?
A、a[1] + 1
B、&a[1][1]
C、(*(a + 1)) +1
D、a+5
答案是:D
a表示首行的地址,+5就跳到第六行了,但是这个数组只有4行,所以已经不在这个数组范围内了。
a + 1是第二行的地址,*(a + 1) 变成第二行首元素的地址,(*(a + 1)) +1就变成了第二行第二个元素的地址。
以上就是这篇内容,如想了解更多,欢迎订阅本专栏!
如有问题可评论区或者私信留言,如果想要进交流群请私信!