目录

1.二维数组的定义和初始化
2.二维数组在内存中的存储
3.二维数组的使用
4.数组与函数

1. 二维数组是定义和初始化

1.1 二维数组的定义

定义类型:类型名 数组名[ 行表达式 ][ 列表达式];行与列用常量表达式。

1.2 二维数组的初始化

/** 定义数组 */
int main()
{int        ar[3][4];       // 3 行 4列 未初始化char  br[3][4];double cr[3][4];return 0;
}

2. 二维数组在内存中的存储

2.1 二维数组的逻辑表示

     注:一个二维数组,在本质上是有多个一维数组构成。(每一个一维数的大小必须相同)

例如:定义 int ar[ 3 ][ 4 ] 的二维数组,它是由 3 个一维数组组成,每个一维数组的大小是 4 个整型元素。可以只对部分元素赋值,未赋值的元素自动取 0 值。

2.1 二维数组的物理表示(按行优先存储)

     注: 如果对二维数组的初始化,那么第一维的长度是可以缺省的,但是第二维不可缺省

int main()
{int ar[][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };     // 3 行 4 列int br[][4] = { {1,2},{3,4},{5,6} };             // 3 行 4 列 数字不足自动补 0int cr[][4] = { 1,2,3,4,5,6,7,8 };                 // 2 行 4 列return 0;
}

调试结果

3. 二维数组的使用

二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。

示例

#include<stdio.h>
/** 二维数组的应用 */
int main()
{int ar[3][4];                      // 定义二维数组int x = 0;for (int i = 0; i < 3; ++i){for (int j = 0; j < 4; ++j){ar[i][j] = ++x;              // 初始化}}for (int i = 0; i < 3; ++i){for (int j = 0; j <; ++j)       // 打印{printf("&ar[%d][%d]=>%#p %d\n",i, j, &ar[i][j], ar[i][j]);}}return 0;
}

运行结果

     总结:C 语言中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,以此类推。也就是说,多维数组用的是一个嵌套的定义。

4. 数组与函数

①. 示例一:一维数组作为函数的形参

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>/** 初始化函数 */
//void Init_Array(int ar[], int n)      数组名退化为指针
void Init_Array(int* ar, int n)
{assert(ar != nullptr && n > 1);        // 断言机制 如果为真则继续进行以下代码for (int i = 0; i < n; ++i){ar[i] = rand() % 100;}}/** 打印函数 */
void Print_Array(int* ar, int n)
{assert(ar != nullptr && n > 1);for (int i = 0; i < n; ++i){printf("%5d", ar[i]);}printf("\n");
}int main()
{int ar[10];int n = 10;Init_Array(ar, n);Print_Array(ar, n);return 0;
}

运行结果

     ②. 示例二:二维数组作为函数的形参

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>/** 初始化函数 */
void Init_Array(int ar[][4], int row, int col)
{for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){ar[i][j] = rand() % 100;}}
}/** 打印函数 */
void Print_Array(int ar[][4], int row, int col)
{for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){printf("%5d", ar[i][j]);}printf("\n");}printf("\n");
}int main()
{int row = 3, col = 4;int ar[3][4];Init_Array(ar, row, col);Print_Array(ar, row, col);return 0;
}

运行结果

     一维数组的知识点详见《C语言之一维数组(详细版)》,请点击此处进行查阅…

C 语言之二维数组(详细版)相关推荐

  1. C语言求二维数组鞍点

    C语言求二维数组鞍点 题目出自谭浩强C程序设计第四版 6.8 鞍点,即该位置上的元素在该行上最大,在该列上最小. 一个二维数组有可能有多个鞍点,当然也可能没有鞍点. 此代码仅考虑鞍点存在的情况 解题思 ...

  2. go语言定义二维数组

    使用go语言二维数组 go语言不用管理内存,很多地方使用起来确实很方便,但是在算法方面确实没有C++优秀,特别是缺少像STL一样优秀模板,定义一个二维数组需要进行如下复杂的操作: go语言的二维数组定 ...

  3. c语言调用二维数组作为函数参数传递,C++ 二维数组作为形参传递使用实例

    在线代码编辑器: http://codepad.org/ 1.*指针 void display(int *arr, const int row, const int col) { for(int i= ...

  4. java二维数组水平翻转,C 语言 利用二维数组实现对输入的数组进行翻转

    C 语言 利用二维数组实现对输入的数组进行翻转(帮助理解对图像翻转编辑原理) /* ?输入几行几列数字和翻转方式,如: 3 4 0即代表3行4列,左右翻转: 6 5 1即代表6行5列,上下翻转. 输入 ...

  5. C语言汇总学生成绩,c语言用二维数组统计学生成绩.doc

    c语言用二维数组统计学生成绩 # include /*定义一个求每门课平均成绩的函数AverageCourse 它的形参一个是二维数组,用来传递学生成绩: 一个是指针变量(数组名),存放每门课的平均成 ...

  6. C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1.直接赋值 2.循环对每个元素赋值 3.借用memset/memset_s初始化为0或-1 4.`数组所有元素初始化为相同值(用于大数组初始化贼方便)` 1.直 ...

  7. C语言删除二维数组的重复数据的一个方法

    C语言删除二维数组的重复数据的一个方法 //以下头文件,未及清理 #include "stdafx.h" #include <vector> #include < ...

  8. 062是c语言常量吗,C语言ch062二维数组.pptx

    <C语言ch062二维数组.pptx>由会员分享,可在线阅读,更多相关<C语言ch062二维数组.pptx(33页珍藏版)>请在人人文库网上搜索. 1.2020/11/11,1 ...

  9. c语言二维数组存储坐标,C语言的二维数组在内存中的存放顺序

    C语言的二维数组在内存中的存放顺序 发布时间:2020-06-28 18:23:49 来源:亿速云 阅读:708 作者:Leah 这期内容当中小编将会给大家带来有关C语言的二维数组在内存中的存放顺序, ...

最新文章

  1. [递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
  2. GPU与CPU版本的矩阵乘法对比
  3. python中汉字与变量不可同时出现_Python语言应用培训课(选择练习)
  4. 将Android源码集成到Eclipse中的方法
  5. 9203精英挑战赛注意事宜 一
  6. 个人技术博客(α)------javaweb的学习路程
  7. ActiveMQ使用教程
  8. mysql sql多个like性能_一个sql很多个not like的简化语句
  9. AT89S52单片机思维导图
  10. OA系统审批流程思路梳理
  11. Word 特殊符号的插入
  12. 郑州计算机安全协会安全员考试成绩,安全员C证考试结果查询
  13. Error: L6218E: Undefined symbol vApplicationGetIdleTaskMemory (referred from tasks.o).
  14. Ubuntu16.04下安装MATLAB 2016b!完美运行
  15. 【时间函数】gettimeofday
  16. FPGA学习笔记2.2——用Verilog实现七段管的工作逻辑
  17. OJB查询(一) (转)
  18. JAVA 时间差8个小时的问题
  19. 自制Android手机相册
  20. 计算机组成原理(二)总线

热门文章

  1. 21岁想学CG插画,怎么学?插画师能做什么工作?
  2. 安装vmware虚拟机详细教程
  3. 安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息...
  4. 计算机毕设 数据可视化分析大屏系统分享
  5. 文件批量改名工具v2.0_绿色免安装版
  6. 【笔记】boolean和Boolean的区别
  7. Windows10 -64 安装tensorflow遇到的:cuda安装后找不到安装文件目录
  8. am572x时钟配置
  9. 小米盒子 android 手机控制,五大操作功能实现小米盒子3增强版连接手机
  10. python科研用哪个软件_科研画图都用什么软件?