C Program基础-二维数组
一维数组可以看作一行连续的数据,只有一个下标。C语言允许构造二维数组甚至多维数组,在实际问题中有时候常常需要用到二维数组(例如数学上的矩阵),二维数组有两个下标,以确定某个元素在数组中的位置。
(一)二维数组的定义
二维数组定义一般的格式是:
DataType ArrayName[Row][Colume];
其中,DataType可以是任何数据类型,ArrayName是数组名,Row是数组的行,Colume是列;
例如int m[5][9];表示的是如下一个5行9列的矩阵:
为了访问i行j列的元素,需要用m[i][j]的形式
虽然在上面我们以表格的形式表示二维数组,但我们需要知道在计算机内存中并不存在这样的存储,C语言是按照行主序的方式存储多维数组,并且是存储在连续空间中,也就是说先存储第0行元素,接着第1行,以此类推。在内存中的布局如下图所示:
(二)二维数组的初始化
(1)完全初始化
通过嵌套一维初始化的方式可以产生二维数组的初始化式:
int m[][] = { { , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , } };
(2)不完全初始化
如果初始化没有大到填满整个二维数组,剩余的元素将被赋值为0:
(a)初始化只填充前面3行,后面两行元素被初始化为0:
int m[][] = { { , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , } };
(b)内层列表没有达到足以填充一行,该行剩余元素被初始化为0:
int m[][] = { { , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , } ,
{ , , , , , , , , } };
甚至可以省略内层花括号(但强烈建议不用这种方式):
int m[][] = { , , , , , , , , ,
, , , , , , , , ,
, , , , , , , , ,
, , , , , , , , ,
, , , , , , , , };
因为一旦编译器发现数值足以填满一行,它就开始填充下一行。但是需要知道,在多维数组中省略内层花括号是非常危险的,因为在不完全初始化的情况下,缺失的元素将会影响初始化,编译器无法计算每行每列该初始化多少个元素。
常用的一个初始化方法,全初始化为0: int a[][] = {};
(三)二维数组的遍历
对于二维数组,一般用双层循环来遍历,
(1)遍历赋值
int a[][];
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
a[i][j] = i + j;
}
}
(2)遍历打印:
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
程序输出:
C Program基础-二维数组的更多相关文章
- C语言基础--二维数组
二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...
- Java基础--二维数组
1.二维数组的定义 二维数组表示行列二维结构,在栈空间中的二维数组的地址指向堆空间中的一维数组,堆空间中的一维数组的地址又指向一维数组所在的内存空间. 2.二维数组的声明 二维数组声明有3种方式,推荐 ...
- C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...
- C Program进阶-二维数组动态内存开辟
对于二维数组,我们知道可以用Type ArrayName[Row][Colume]的方式来定义,这是一种静态内存开辟的方式,程序在编译的时候就为该数组分配了空间,而且行和列大小也是指定的.这篇文章里我 ...
- C语言基础二维数组
(1)二位数组的定义int array[n][m],行下标的取值范围是0~n-1,列下标的取值范围是0~m-1,二维数组最大下标元素是array[n-1][m-1]:如定义一个3行4列的数组 int ...
- php 基础 二维数组以某个重复值累加
$arr = array( array('id' => 123, 'name' => '张三', 'amount'=>'1'), array('id' => 123, 'nam ...
- c#简单实现二维数组和二维数组列表List<>的转置
刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...
- Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals
/*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...
- Java数组之二维数组
Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...
随机推荐
- hdu 1394 Minimum Inversion Number(逆序数对) : 树状数组 O(nlogn)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 //hdu 题目 Problem Description The inversion number ...
- mysql对查出来的值,在sql里面拼接我们想要拼接的内容
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- Linux 学习第四天
Linux学习第四天 一.常用命令 1.tar (压缩.解压) A.添加压缩包 tar czvf 压缩包名称.tar.gz 源文件 B.添加压缩包 tar cjvf 压缩包名称.tar.bz2 ...
- C# 后台Http访问 raw from 键值对
using RestSharp;using System;using System.Collections;using System.Collections.Generic;using System. ...
- Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore[转]
[转载]http://www.cnblogs.com/dolphin0520/p/3920397.html 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDow ...
- ASP.NET MVC4.0 后台获取不大前台传来的file
<td>选择图片</td> <td> <input type="file" id="uploadImg" name=& ...
- 通过session_id恢复session内容
1.取得session_id // 开启session session_start(); // 取得 $_SESSION['test'] = '111222333'; $session_id = se ...
- day2-exercise
# Author: 刘佳赐-Isabelle October 22,2018 """ 1.有变量name = "aleX leNb" 完成如下操作: ...
- java 用接口计算圆柱的体积和面积并添加颜色
import java.util.Scanner; class Test { public static void main(String[] args) { fangfa i = new fangf ...
- Java两个线程实现交替运行-以交替打印奇偶数为例
本文旨在两个线程交替运行,不多哔哔直接看代码吧 public class Work2 { static final Object object = new Object(); public stati ...