数组----二维数组
多维数组元素有多个下标,以标识它们在数组中的位置,所以也称为多下标变量。
一、二维数组的定义和引用
格式:
[存储类型符] 数据类型符 数组变量名[整型常量表达式1] [整型常量表达式2];
对二维数组中数据单元的引用格式如下:
数组变量名[下标1][下标2]
例子:
int a[2][3];
定义了a是一个2x3(2行3列)的数组,共6个整型的数组元素,分别是a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]。
C语言把二维数组看作一个特殊的一维数组,它的数组元素又是一个一维数组,如上面定义的数组a,可以看作有两个数组元素a[0]、a[1]的一维数组;而a[0]、a[1]又是拥有3个int型数组元素构成的一维数组。a[0]可看作是由数组元素a[0][0]、a[0][1]和a[0][2]构成的一维数组名,而a[1]可看作是由a[1][0]、a[1][1]和a[1][2]构成的一维数组名
二维数组在物理上采用按行存储的顺序存储方式,我们称这种存储顺序为以行序为主序的顺序存储结构。
注意:二维数组所占内存空间的首地址,是一个地址常量。定义二维数组,a的值是2000,与a[0]的值相同,但意义不同。
对于数据单元在内存的地址可通过下面的公式计算:
有效地址=数组的起始地址+(下标1x第二维大小+下标2)xsizeof(元素类型)
二、二维数组的赋值
1、二维数组的初始化赋值
程序中定义二维数组时,可以对数组变量赋初始值。具体方法如下面两种:
(1)分行初始化赋值
一般格式为:
[存储类型] 数据类型 数组变量名[行常量表达式][列常量表达式]=
{{第0行初值表},{第1行初值表},...,{最后一行初值表}};
赋值规则为:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第一行初值表”中的数据,依次赋给第1行各元素;以此类推。下面给出分行初始化的例子:
例一:
int a[2]a[3]={{1,2,3},{4,5,6}}; //对数组元素全部赋值
1 2 3 4 5 6
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
例二:
int a[2][3]={{1},{3}}; //对数组部分赋值
1 0 0 3 0 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 例三:
int a[][3]={{1,2},{4}}; //对数组元素部分赋值,省略第一维大小
这是因为编译系统将会依据初值表的个数来决定第一维的大小,如上面定义的数组a
有两个初值表,因此第一维的大小是2,所以共有6个数组元素。但是系统必须知道第二维
的大小,它不能省略。这种情况下,数组a的各元素的值,如图:
1 2 0 4 0 0
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
初值表中至少要包含一个初值。
int a[2][3]={{},{4,5,6}}; //第一个初值表为空,错误
(2)按元素在内存中的排列顺序初始化赋值
格式:
[存储类型符] 数据类型 数组变量名 [行常量表达式][列常量表达式]={初值表}
赋值规则:按二维数组中的元素在内存中的排列顺序,将初值表中的数据,依次赋给各元素,下面给出按这种方式初始化的例子:
例1:
int a[2][3]={1,2,3,4,5,6}; //对数组元素全部赋值
图与例一一样
例2:
int a[2][3]={1,2,3}; //对元素进行部分赋值
1 | 2 | 3 | 0 | 0 | 0 |
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
例3:
int a[ ][3] ={1,2,3,4}; //对数组元素部分赋值,省略第一维大小
这种情况下,数组a的各元素的值如图所示
1 | 2 | 3 | 4 | 0 | 0 |
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
2、二维数组在程序中的赋值
像一维数组在程序中赋值一样,二维数组在程序中赋值也可以通过赋值语句、循环逐一赋值以及使用库函数memset、memcpy等方法来进行。
例如,下面的程序是通过键盘输入对二维数组a个元素赋值。
int i,j,a[2][3];
for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[2][3]);
下面通过调用memmset函数把数组a的各元素清0.
memset(a,0,6*sizeof(int)
假设还定义了数组int b[2][3];那么可通过memcpy函数将数组a各元素的值复制到数组b的个元素中。
memcpy(b,a,6*sizeof(int));
三、二维数组应用
经典例子:
有一个3x4的矩阵,要求编写程序求出其中最大的元素值以及其所在的行列号。
#include<stdio.h>
int main()
{int i,j,row=0,col=0,max;int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; //定义数组并赋初值max=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max) //如果某元素大于max,就取代max的原值{max=a[i][j];row=i; //记下此元素的行号col=j; //记下此元素的列号}printf("max=%d,row=%d,col=%d\n",max,row,col);return 0;
}运行结果:
max=a[2][5],row=2,col=5
数组----二维数组相关推荐
- C# 指定格式的字符串截成一维数组(二维数组)的操作类
指定格式的字符串截成一维数组(二维数组)的操作类 做项目时经常会遇到将"1,3,a,b,d"截成一维数组或将"1,a;2,b;3,c;4,d"截成二维数组.虽然 ...
- 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...
- php 二位数组随机,PHP多维数组 php打乱数组二维数组多维数组的简单实例
php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 上面这个是针对二维数组的! 下面针对多维数组的乱序方法?尽可能的方便快速: 以下函数也是出自php手册,可 ...
- c/c++教程 - 1.7 数组 一维数组 二维数组
九.数组 数组:一个里面存放了相同类型数据元素的集合. 特点:每个数组中的元素都是相同的数据类型:数组是由连续的内存位置组成的. 注意:数组的下标是从0开始索引. 参考视频:https://www.b ...
- php 数组重新打乱_php打乱数组二维数组多维数组的简单实例
php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 function shuffle_assoc($list) { if (!is_array($list)) ...
- day06数组-一维数组二维数组
数组: 数组到底是什么呢?有什么特点呢?通过上面的分析:我们可以得到如下两句话: 1.数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. ...
- C语言数组——二维数组
C语言目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS ...
- 数组(一维数组、多维数组/二维数组)和简单排序算法
提示:数组是线性数据结构中最为基础,最为典型的一种顺序型结构. 它用一组连续的内存空间 ,来存储一组具有相同类型的数据. 与变量相比,变量是一种单一的数据存储方式,而数组是用于存储一连串的一组数据. ...
- 数组-二维数组中的查找
题意: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: ...
- C# 数组 二维数组
数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据 数组的定义 1.数组里面的内容必须是同一类型 2.数据必须有长度限制 ...
最新文章
- 三个数字的运算规律预测
- Unix command to find CPU Utilization
- 苏宁物流研发中心运输产品线产品总监钟翼翔:IOT技术的应用分析
- vlan后 出现 outlook 正在试图从服务器检索数据
- Redis缓存雪崩、缓存穿透、热点Key解决方案和分析
- BroadcastReceiver应用详解(转)
- 解决VS命令提示符 “Setting environment for using Microsoft Visual Studio. 此时不应有“系列错误
- 荣耀V40屏幕素质得到“认证”:120Hz高刷屏没跑了
- 软件工程导论 01章软件工程学概述
- 图像局部特征(六)--斑点检测之SIFT算法原理总结补充
- 坦克大战小游戏的实现
- 基于UDP广播的局域网匿名聊天APP
- 餐巾计划问题 费用流
- 火车票能不能选座_电话订火车票可以自己选座位吗
- 测试点击屏幕次数的软件_一款让安卓手机更好用的软件——fooView
- 信息数据管理思维导图(Xmind)
- QT翻金币小游戏实现(三)
- C语言习题:猜数字游戏(C语言随机数)
- MySQL:使用PMM进行性能监控
- Android从相册中选取图片上传到阿里云OSS
热门文章
- 柱状图折线图混合使用
- 重组标签云-标签聚类及其评价研究
- 微信表情符号写入判决书,你发的OK、炸弹都可能成为“呈堂证供”
- CodeForces 596B Wilbur and Array 贪心
- Java Web概述-练习题
- 自行车小组问卷调查报告
- Xshell 6 免费版下载及设置教程
- 系统集成项目管理工程师学习建议
- starUML建立模型及生成代码框架
- Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目