当前位置: 首页 > news >正文

C语言学习day16:二维数组

二维数组格式:

数据类型 数组名[行][列] =
{
    {值1,值2},
    {值3,值4}
}

代码:

int arr[2][3] = { {1,2,3},{4,5,6} };

那么我们怎么找它的下标呢,我先上一副图:

假如我现在要找1,那么它的下标就会是arr[0][0];

我们知道一维数组的求个数是:

由整个数组的大小/第一个数组元素的大小

sizeof(arr)/sizeof(arr[0])

那么我们二维数组的个数以及值要怎么求呢:

代码:

	printf("二维数组大小=%d\n",sizeof(arr));//行*列*数据类型大小printf("二维数组一行大小:%d\n",sizeof(arr[0]));printf("二维数组元素大小:%d\n",sizeof(arr[0][0]));printf("二维数组行数:%d\n", sizeof(arr)/sizeof(arr[0]));printf("二维数组列数:%d\n",sizeof(arr[0]) / sizeof(arr[0][0]));

解释一下

  • sizeof(arr)=整个二维数组的大小
  • sizeof(arr[0])=二维数组第一行(下标0)的大小
  • sizeof(arr[0][0])=二维数组单个元素的大小

接下来我们计算:

  • sizeof(arr)/sizeof(arr[0])=整个二维数组的大小/二维数组第一行(下标0)的大小=行数    举个例子:总值=大小*单数
  • sizeof(arr[0])/sizeof(arr[0][0])=第一行(下标0)的大小/单个元素的大小=单行的数量

我们来给数组赋值:

int arr[2][3] = { {1,2,3},{4,5,6} };

输出:

接下来我们看看二维数组地址的变化:

代码:

int main()
{int arr[2][3] ={{1,2,3},{4,5,6}};//二维数组首地址printf("%p\n", arr);printf("%p\n", arr[0]);printf("%p\n",&arr[0][0]);system("pause");return EXIT_SUCCESS;
}

 输出:

没错。我们发现arr=arr[0]=arr[0][0] 

说明取的依然是首地址

我们现在改一下下标

代码:

	printf("%p\n", arr);printf("%p\n", arr[1]);printf("%p\n",&arr[1][1]);

输出:

 没错,它们还是连续性的,并且每个元素相隔的规律和一维数组一样

接下来我们遍历一下二维数组的地址

代码:

	int arr[2][3] ={{1,2,3},{4,5,6}};for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){printf("%p\n",&arr[i][j]);};

输出:

这证明了我们的结论是完全正确的

同时二维数组还有三种写法

代码:

	int arr[2][3] = { {1,2,3},{4,5,6} };int arr[2][3] = { 1,2,3,4,5,6 };int arr[][3] = { 1,2,3,4,5,6 };

 输出:

都是可以的 

相关文章:

  • C++初阶(十一) list
  • Python算法题集_二叉树的右视图
  • 分布式学习笔记
  • notepad++运行python闪一下就没啦
  • 跟着pink老师前端入门教程(JavaScript)-day03
  • 嵌入式大厂面试题(1)—— CVTE
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
  • java面试微服务篇
  • 21种matlab信号分解方法汇总
  • 【Mysql】数据库架构学习合集
  • 探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’
  • 黑客利用F5 BIG-IP漏洞传播Linux挖矿病毒
  • Python如何实现定时发送qq消息
  • 挑战杯 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv
  • Java六种常用线程创建执行方法
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • axios请求、和返回数据拦截,统一请求报错提示_012
  •  D - 粉碎叛乱F - 其他起义
  • js中的正则表达式入门
  • Mysql数据库的条件查询语句
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • spark本地环境的搭建到运行第一个spark程序
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 彻底搞懂浏览器Event-loop
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 大型网站性能监测、分析与优化常见问题QA
  • 对象管理器(defineProperty)学习笔记
  • 反思总结然后整装待发
  • 前言-如何学习区块链
  • 入门级的git使用指北
  • 使用权重正则化较少模型过拟合
  • 数据科学 第 3 章 11 字符串处理
  • 思否第一天
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信小程序实战练习(仿五洲到家微信版)
  • 应用生命周期终极 DevOps 工具包
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 透过事物看本质的能力怎么培养?
  • ###项目技术发展史
  • (4) PIVOT 和 UPIVOT 的使用
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (简单) HDU 2612 Find a way,BFS。
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .NET 药厂业务系统 CPU爆高分析
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @selector(..)警告提示
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [04]Web前端进阶—JS伪数组
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C#7] 1.Tuples(元组)
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [docker] Docker容器服务更新与发现之consul