二维数组在存储时按行优先连续存储,数组名是一个二维指针,如 int a[3][2] 中,a 是一个二维指针,而a[0],a[1],a[2]都相当于普通的一位数组的数组名,是一个固定值的指针。

二维数组在声明的时候可以直接全部赋值,如:

int a[2][3]={0};//All elems are 0

  1. int a[2][3] ={1,2,3,4,5,6};
    Or
    int a[][] ={
  2. {,,},
  3. {,,}
  4. };

也可以在声明时部分赋值,如:

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

不能先声明再全部赋值,如下方式是错误的:

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

二维数组作为函数的“返回值”,有两大类

一. 外部二维数组作为函数参数传进来,本函数对其的操作在函数外也有效(因为二维数组的名称同一位数组一样,也是一个固定值的指针),其实这个不算是函数的返回值,如:

  1. int a[][] ={
  2. {,,},
  3. {,,}
  4. };
    void add(int b[][3])
    {
      a[0][0] += 10;
      a[1][2] +=20;
    }
    cout<<"a[0][0]= "<<a[0][0];
    cout<<"a[1][2]= "<<a[1][2];

结果为:

  1. a[0][0]= 11
    a[1][2]= 26
  2.  
  3. 二. 将函数的返回值定义为二维数组指针类型,这样返回的就是真正的二维数组。而这种方式也有两种:
    1. 如下,函数返回的是一个二维数组指针,而这个二维数组的规格是 int arr[][2]
  1. #include <stdio.h>
  2. int (*fun(int b[][]))[]
  3. {
  4. return b; // return a 2_dim array pointer
  5. }
  6.  
  7. int main()
  8. {
  9. int i,j;
  10. int a[][]={,,,};
  11. int (*c)[]; //c is a pointer variable of 2-dim array
  12. c = fun(a);
  13. for(i=;i<;i++)
  14. for(j=;j<;j++)
  15. printf("%d ",c[i][j]);
  16. return ;
  17. }

2. 用 typedefine 类型定义,可以增加程序的可读性

  1. #include <stdio.h>
  2. typedef int (*R)[]; // R is a new data type!
  3. R fun(int b[][])
  4. {
  5. return b;
  6. }
  7. int main()
  8. {
  9. int i,j;
  10. int a[][] = {,,,};
  11. R c;
  12. c = fun(a);
  13. for(i=;i<;i++)
  14. for(j=;j<;j++)
  15. printf("%d ",c[i][j]);
  16. return ;
  17. }

C/C++二维数组的用法的更多相关文章

  1. JAVA_SE基础——21.二维数组的定义

    2 二维数组的定义 基本与一维数组类似 //定义一个3行5列的二维数组 //方法1,先new对象,然后再初始化每个元素 int[][] a = new int[3][5]; a[0][0]=1; a[ ...

  2. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  3. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

  4. 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序

    从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...

  5. C#的switch与二维数组.....

    今天由于工作上的需要, 改了几行C#  的代码, 发现有一些细微的语法区别,与C++, 像switch语句那样, 我一般不会在default后面加上break,语句, 可是发现如果不加上的话,就会报下 ...

  6. C++中用二维数组传参时形参该怎样写[转]

    二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写? 要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正 ...

  7. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  8. C语言 一维数组叠加为二维数组样例

    这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...

  9. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

随机推荐

  1. 如何获取hibernate代理类代理的实际对象实例?

    在hibernate中,通过sql语句查询带clob字段的记录,查出来的结果集是List<HashMap<String,Object>>类型,在调用jackson的接口转为js ...

  2. java核心技术第一卷

    sell窗口(dos窗口命令)中要注意大小写: 编译java文件需要加上扩展名,运行java.class时只要文件名java,不需要扩展名:

  3. js--敏感词屏蔽

    <!doctype html><html><head><meta charset="utf-8"><meta name=&qu ...

  4. 【7集iCore3基础视频】7-6 Quartus II 13.1安装

    Quartus II 13.1安装:高清源视频:链接:http://pan.baidu.com/s/1csVRMA 密码:lkth 视频勘误:http://pan.baidu.com/s/1mhCIq ...

  5. Codeforces Round #384 (Div. 2) ABCD

    一场比较简单的div2 电脑出了点问题 所以在比赛中理论ac了ACD 除了爆int这种事情之外.. A 一个人想从a到b 移动的花费这么定义 如果初始点和到达点类型相同 就不花钱 反之花距离差的绝对值 ...

  6. 重新梳理HTML基础知识

    缘起 HTML(HyperText Markup Language超文本标记语言)是用于构建web页面的标记语言和通用标准.它并不是一项新的发明,因为超文本(具有超链接的文本)和标记语言(用于电子文档 ...

  7. 安装VS 2015完成后,VS2012 打开报错

    安装VS 2015完成后,VS2012 打开报错 打开VS2012Web项目,弹出错误提示: asp.net 4.0 has not been registered on the web server ...

  8. AsyncTask内的各个方法调用顺序

    |- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作. ...

  9. ECshop通过文章分类的ID实现不同模板

    当客户需要想要用不同模板来实现文章页面时,文章就需要实现调用不同模板的内容,着手点就是它的分类ID.直接通过分类ID来判断一下,现在68ecshop技术来告诉你该怎么做 方法如下所示: 一.打开根目录 ...

  10. iOS程序上传流程 2014年9月最新版

    程序上传步骤: 1.登录账户,点击Manage Your Apps 2.点击Add New App 3.注册Bundle ID,点击蓝色的here 4.进入了注册页面,首先要填写App ID的一个描述 ...