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

 输出:

都是可以的 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JWT和base64

1.1 jwt和token 1.1.1 token介绍 令牌&#xff08;Token&#xff09;&#xff1a;在计算机领域&#xff0c;令牌是一种代表某种访问权限或身份认证信息的令牌。它可以是一串随机生成的字符或数字&#xff0c;用于验证用户的身份或授权用户对特定资源的访问。 简单理解 : 每个…

vue-路由(六)

阅读文章你可以收获什么&#xff1f; 1 明白什么是单页应用 2 知道vue中的路由是什么 3 知道如何使用vueRouter这个路由插件 4 知道如何如何封装路由组件 5 知道vue中的声明式导航router-link的用法 6 知道vue中的编程式导航的使用 7 知道声明式导航和编程式导航式如何传…

Java实现新能源电池回收系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

BUGKU-WEB source

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看源码&#xff0c;看F12网络请求没有东西只能老老实实按照提示用Linux去扫描目录 相关工具 kali虚拟机安装gobuster 或者dirsearch 解题步骤 先查看源码&#xff1a; flag{Zmxhz19ub3RfaGvyzS…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型&#xff0c;朴素贝叶斯是生成模型&#xff0c;所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯&#xff0c;逻辑回归是最大似然&#xff0c;两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…

[java基础揉碎]方法的调用机制 方法使用的细节 方法的递归调用 方法的可变参数​

目录 方法的调用机制 方法使用的细节 方法的递归调用 方法的可变参数​编辑​编辑 方法的调用机制 方法使用的细节 访问修饰符&#xff08;作用是控制方法使用的范围&#xff09; 如果不写默认访问&#xff0c;[有四种&#xff1a;public,protected,默认&#xff0c;priv…

FLUENT Meshing Watertight Geometry工作流入门 - 8 添加边界层网格

本视频中学到的内容&#xff1a; 如何使用 “添加边界层”任务生成边界层网格边界层网格在流体动力学中的重要性可用于添加边界层网格的方法以及所需的用户输入 视频链接&#xff1a; FLUENT Meshing入门教程-8添加边界层网格_哔哩哔哩_bilibili 流体动力学中边界层的概念及…

JAVA面试题并发篇

1. 线程状态 要求 掌握 Java 线程六种状态 掌握 Java 线程状态转换 能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法…

通过Linux终端搭建基于HTTP隧道的文件传输系统

嘿&#xff0c;Linux小侠们&#xff0c;准备好挑战一项酷炫的任务了吗&#xff1f;今天我们要一起通过Linux终端搭建一个基于HTTP隧道的文件传输系统&#xff0c;让我们的文件在网络的海洋中畅游无阻&#xff01; 在开始之前&#xff0c;让我们先来想象一下这个场景&#xff1…

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…

不同品牌和种类的电容与电感实测对比(D值、Q值、ESR、X)

最近买了个LCR电桥&#xff0c;就想测一下手头上的各种电容电感的参数&#xff0c;对比一下。 测试设备是中创ET4410&#xff0c;测量的参数有&#xff1a;电容值、电感值、D(损耗角正切值)、Q(品质因数)、ESR(等效串联电阻)、X(电抗&#xff0c;通常表示为感抗XL或容抗XC)。 …