前言

是突然想到的方法,可能早有大佬想过这样的方法,但我还是记录下来,路过的各位就当看个新鲜。

首先是寻常的遍历方法

一维数组

我们遍历一维数组,正常的方法是改变数组的下标依次打印遍历数组。

代码如下:

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

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

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

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

  1. c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

    C语言中二维字符数组应该怎样赋值? c语言二维数组如何定义字符串????急... 二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小]; 例如:char c[3][10]; //定义 ...

  2. c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?

    C++| 匠心之作 从0到1入门学编程[免费]​yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...

  3. C语言中的一维数组和二维数组

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104344394 一 ...

  4. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程

    本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...

  5. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  6. 【IT】C语言函数中怎么返回一个二维数组

    C语言函数中怎么返回一个二维数组

  7. 【C语言】数组(一维数组、二维数组)

    目录 一.一维数组 1.一维数组的创建(定义) 2.一维数组的初始化 3.一维数组的内存分配 二.二维数组 1.二维数组的创建(定义) 2.二维数组的初始化 3.二维数组的内存分配 三.数组越界 四. ...

  8. 【C语言】指针表达进阶:指针在一维数组、二维数组的应用(如何用指针表达一维数组、二维数组的元素的地址、元素值)

    指针可以替代数组名 1.在一维数组中:int a[9]; int *p=a; 一维数组名指向的是列!(后面总结,迷得话不用慌) 则想要获取a[i]的地址方法:a+i; .p+i; .p[i]; 获取a ...

  9. Java中的一维数组和二维数组

    Java中的数组 常用的就是一维数组.二维数组. 一维数组 数组定义:数据就是相同数据元素的集合. 数组是一种引用数据类型.不属于基本数据类型. (1) 如何定义(声明)一维数组? 声明格式:数据类型 ...

  10. c语言三维数组 三维指针,C语言 通过指针访问一维数组,二维数组,三维数组。...

    /** 通过指针来访问一维数组,二维数组,多维数组 */ #include const int COLS=3; const int COUNT=4; //通过一级指针,计算偏移量来遍历一维数组 voi ...

最新文章

  1. 制作Windows Mobile程序安装包
  2. aFleX脚本常见错误
  3. Linux slab 分配器剖析
  4. 利用libevent 和线程池实现高并发服务器的设计
  5. 巧用EditPlus包含VS2010网站项目资源
  6. 2021年Q1移动互联网行业数据研究报告
  7. python3.3 连接mysql_python3.3连接mysql数据库
  8. 在基于or1200处理器的SoC上移植linux
  9. [转]详解Flex布局(语法+教程)
  10. macbook查看java版本,Mac下查看JDK版本和安装目录
  11. Deepin安装和设置Kodi,实现手机APP投屏和IPTV功能
  12. linux cups samba,centos7 安装cups+smb共享打印机
  13. base64字符串转换为图片
  14. Delphi Inputbox,InputQuery用法
  15. VR产生眩晕感原因之一——景深
  16. Servlet知识概括详解
  17. 破除谷歌浏览器Google Chrome启动时打开hao123,2345等流氓网页
  18. RPC + Dubbo
  19. 三极管计数系统的设计与实现matlab,运动控制系统课程设计-双闭环直流电动机调速系统设计及MATLAB仿真汇.docx...
  20. 牧牛商学院,区块链技术在会计领域的应用

热门文章

  1. Openlayers3 实现点击不同的图标弹出不同的popup信息
  2. yaml引号用法_字符串包含空格或特殊字符_需要加引号
  3. C语言两人掷骰子游戏(初学)
  4. java中接口的用法
  5. 2.3、CSS样式、盒子模型
  6. Android 检测微信或者微博是否安装
  7. 怎么样喝酒才会不那么容易喝醉?
  8. 超链接(文本超链接、图片超链接)
  9. 将bitmap裁剪为圆形
  10. php四舍五入+1位小数,PHP 四舍五入精确小数位及取整