二维数组

一、二维数组的定义

类型名  数组名[ 常量表达式1 ][ 常量表达式2 ]
int a[2][2]

二维数组可以看成是矩阵(或表格),常量表达式1可以看成矩阵(表格)的行数,常量表达式2可以看成矩阵(表格)的列数。

二维数组可以看成一个一维数组a[0],a[1],数组中的元素又是一个个一维数组a[0][0],a[0][1]和a[1][0],a[1][1]

在内存中,二维数组站一系列连续的存储单元。存放的顺序是“ 按行存放

二、二维数组的初始化

1、赋初值个数与数组元素个数相同

int a[4][3] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}}

2、一行所赋初值个数与数组每行元素不同

系统自动给该行后面的元素补充初值0,但是不能跳过每行前面的元素给后面的元素赋初值

int a[4][3] = {{1,2,3},{1},{1,3},{1}}
// 等价于
int a[4][3] = {{1,2,3},{1,0,0},{1,3,0},{1,0,0}}

3、赋初值行数少于数组的行数

系统自动给不足行赋初值0

int a[4][3] = {{1,2,3},{1}}
// 等价于
int a[4][3] = {{1,2,3},{1,0,0},{0,0,0},{0,0,0}}

4、赋初值时省略花括号

系统按照元素在内存中排列的顺序,将{}中的元素一一对应地赋给各个元素,若数据不足,后面的元素自动赋初值0

int a[4][3] = {1,2,3,4,5,6,7}
// 等价于
int a[4][3] = {{1,2,3},{4,5,6},{7,0,0},{0,0,0}}

三、通过赋初值定义二维数组的大小

在一维数组中可以省略常量表达式,通过赋初值个数来确定数组的大小。

==> 二维数组也可以省略常量表达式,但是 只能省略常量表达式1

int a[][3] = {{1,2,3},{1},{2,3}}
// 等价于
int a[3][3] = {{1,2,3},{1},{2,3}}
int a[][3] = {1,2,3,4,5,6,7}
// 等价于
int a[3][3] = {{1,2,3},{4,5,6},{7,0,0}}

四、二维数组与指针

1、二维数组的名字

​ 在二维数组中,数组名也是一个存放地址的指针,它的值是二维数组中第一个元素的地址。a与a[0]的值相 同,a+1与a[1]的值相同,a+2与a[2]的值相同,他们分别表示第一行、第二行、第三行的首地址。

​ ===> 二维数组的名字是一个行指针,表示一行的首地址

2、二维数组元素的地址

// 三种方式等价
&a[i][j]
a[i]+j
*(a+i)+j

3、引用二维数组元素

  • 通过地址引用二维数组元素
int a[3][4]

a[i][j]  <==>  *(a[i]+j)  <==>  *(*(a+i)+j)
  • 通过建立指针数组引用二维数组元素
int *p[3],a[3][2]

*(p[i]+j)  <==>  *(*(p+i)+j)  <==>  (*(p+i))[j]  <==> p[i][j]
  • 通过建立一个行指针引用二维数组元素
int a[3][2],(*p)[2]

p[i][j]  <==>  *(p[i]+j)  <==>  *(*(p+i)+j)  <==>  (*(p+i))[j]

4、二维数组名与指针数组作为实参

  • 二维数组名作为实参

    当二维数组名作为实参时,形参必须是一个行指针变量

main(){
int s[M][N];
fun(s);
} // 形参的三种书写形式
fun(int (*a)[N])
fun(int a[][N])
fun(int a[M][N])
  • 指针数组作为实参

    当指针数组名作为实参时,形参必须是一个指向指针的指针
main(){
int s[M][N], *ps[M];
for(int i=0;i<M;i++)ps[i]=s[i];
func(ps)
} // 形参的三种书写形式
func(int *a[M])
func(int *a[])
func(int **a)

C语言——二维数组的更多相关文章

  1. c语言二维数组传递

    c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...

  2. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

  3. C语言 二维数组复制、清零及打印显示

    #include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 ],int row, ...

  4. C语言二维数组作业

    一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量), ...

  5. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  6. C语言二维数组

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  7. C语言二维数组作为函数参数

    设有整型二维数组a[3][4]如下:0   1   2   34   5   6   78   9  10  11 它的定义为:    int a[3][4]={{0,1,2,3},{4,5,6,7} ...

  8. C语言二维数组作为函数的参数

    前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...

  9. C语言二维数组实现扫雷游戏

    #include<stdio.h> //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+','+', ...

  10. c语言二维数组与指针

    问题,以下输出的结果是什么,区别在于哪? void main() { ][] = { ,,,,,,,,,,, }; //输出的3个地址都一样,差别在哪? printf("\n%x" ...

随机推荐

  1. PHP处理地址匹配出省市区

    function handleAddress($address ='广东省深圳市龙华新区大浪街道同胜科技大厦'){ preg_match('/(.*?(省|自治区|北京市|天津市))/', $addr ...

  2. -webkit-box 高度自动填满

    <style> .box{ display: -webkit-box; -webkit-box-orient: vertical; height: 200px; background: # ...

  3. POI教程

    很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据.例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Ex ...

  4. Eureka 系列(05)消息广播(上):消息广播原理分析

    Eureka 系列(05)消息广播(上):消息广播原理分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 首先回顾一下客户端服务发现的流程,在上一篇 Eureka 系列( ...

  5. Dubbo与SpringBoot的结合

    前言 这段时间在接触分布式的内容,因为公司的技术栈是 dubbo ,所以我顺其自然地选择了 dubbo 作为我学习的框架. 看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了 ...

  6. USACO Milk Routing /// 优先队列广搜

    题目大意: 在n个点 m条边的无向图中 需要运送X单位牛奶 每条边有隐患L和容量C 则这条边上花费时间为 L+X/C 求从点1到点n的最小花费 优先队列维护 L+X/C 最小 广搜到点n #inclu ...

  7. 欧拉函数(Euler_Function)

    一.基本概述在数论,对正整数n,欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商 ...

  8. 1、eureka注册中心单机

    Spring Cloud 2.x系列之 eureka注册中心单机 一.简介 Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块.而Spring Clo ...

  9. 出现异常: 非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复: required

    在将web.config文件中的<add key="ClientValidationEnabled" value="false" /> 设为fals ...

  10. 【记录】ajax跨域问题jsonp正确的使用方式

    最近遇到ajax请求跨域问题,解决方案用jsonp,现记录如下: //跨域请求jsonp封装 function doJsonPostCallBack(type, url, data,async, ca ...