C语⾔中⼀维数组和⼆维数组的寻常遍历⽤指针的遍历前⾔
是突然想到的⽅法,可能早有⼤佬想过这样的⽅法,但我还是记录下来,路过的各位就当看个新鲜。
⾸先是寻常的遍历⽅法
⼀维数组
我们遍历⼀维数组,正常的⽅法是改变数组的下标依次打印遍历数组。
代码如下:
int a[10]={1,2,3,5,6,7,8,5,11,2},i=0;
while(i<10){
printf("%d ",a[i++]);
}
putchar(10);
当然我们也可以⽤其他的循环⽅式。
⼆维数组
⼆维数组亦是⼀样依次访问下标来遍历数组,只不过此时要定义两个变量来表⽰数组的⾏和列。
代码如下:
int a[2][3]={{1,2,3},{5,2,6}},i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
putchar(10);
}
花⾥胡哨的遍历⽅法
⼀维数组
学过数组的我们都知道,数组的⼀⼤特征就是在内存中地址连续,因此我们可以从这个特征⼊⼿,来点不⼀样的遍历⽅式。
⾸先⼀个⼀维数组,它的数组名除了代表了⼀个标识外,还代表了数组的起始地址,也代表着数组中的第⼀个元素的地址。
我们假设数组名为a,a就是a[0]的地址,则a+1就是a[1]的地址,a+2就是a[2]的地址....直到最后。
所以我们可以利⽤这个特性来遍历数组元素的地址,再转回数值就可以了。
代码如下:
int a[5]={2,5,3,6,5},i=0;
while(i<5){
printf("%d ",*(a+i++));
c语言二维数组表示方法
}
putchar(10);
⼆维数组
⼆维数组在内存中也是连续存放的,是⼀⾏⼀⾏的按次序存储。所以我们也可以依照这个性质来遍历数组。
⾸先假设数组名为a,a代表了数组的起始地址,也代表了a[0]的地址,也代表了a[0][0]的地址。
a+1代表了a[1]的地址,⼆维数组在这⾥便是加⼀⾏,不同于⼀维数组的加⼀个元素。
a[0]+1代表了a[0][1]的地址,a[1]+1代表了a[1][1]的地址.....
那么怎么搞呢?我开始是陷⼊了如何在循环中变化a[i]+j,但这样不就和寻常的遍历⼀样要⽤双层for循环了吗,正当我思考的时候,突然闪过⼀个念头,⼆维数组不是内存连续的吗,为什么不能和遍历⼀维数组⼀样呢?
于是代码如下:
int a[2][3]={{2,5,3},{5.6.7}},i=0;
while(i<6){
printf("%d ",*(a[0]+i++));
}
putchar(10);
⽤指针遍历数组效率⽐⽤下标遍历要⾼,因为下标也是转化为指针来访问数组元素。学习嵌⼊式是免不了和内存,寄存器打交道的,这样思考问题会对以后的学习有很⼤的帮助,⽽且这可能会成为我的编程习惯的⼀部分。
所以,诸君我们⼀起努⼒吧!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。