2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言中一维数组和二维数组的寻常遍历用指针的遍历

C语言中一维数组和二维数组的寻常遍历用指针的遍历

时间:2018-12-28 21:15:18

相关推荐

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++));}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);

用指针遍历数组效率比用下标遍历要高,因为下标也是转化为指针来访问数组元素。学习嵌入式是免不了和内存,寄存器打交道的,这样思考问题会对以后的学习有很大的帮助,而且这可能会成为我的编程习惯的一部分。

所以,诸君我们一起努力吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。