C语言——二维数组
二维数组
一、二维数组的定义
类型名 数组名[ 常量表达式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语言——二维数组的更多相关文章
- c语言二维数组传递
c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C语言 二维数组复制、清零及打印显示
#include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 ],int row, ...
- C语言二维数组作业
一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量), ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- C语言二维数组
上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...
- 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} ...
- C语言二维数组作为函数的参数
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...
- C语言二维数组实现扫雷游戏
#include<stdio.h> //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+','+', ...
- c语言二维数组与指针
问题,以下输出的结果是什么,区别在于哪? void main() { ][] = { ,,,,,,,,,,, }; //输出的3个地址都一样,差别在哪? printf("\n%x" ...
随机推荐
- PHP面试 AJAX基础内容
AJAX基础内容 Ajax的基本工作原理 Ajax基础概念:通过在后台与服务器进行少量数据交换,Ajax可以使用网页实现异步更新 Ajax工作原理:XMLHttpRequest是Ajax的基础 ...
- J. The Volcano Eruption(圆相交+并查集)
题目链接:https://codeforces.com/gym/101915/problem/J 思路:将所有相交的圆用并查集维护看做一个整体,然后枚举每个整体的左边界和右边界,判断能不能同时覆盖整个 ...
- python学习笔记:数据类型——数字、字符串、元祖、字典
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数 ...
- 第一周复习二 (CSS样式表及其属性)
样式表三种写法 1内联写法:style直接写在标签内.个人感觉多用于个别标签,一般情况优先级较高 style="font-size:16px;" 2内嵌写法:写在<head& ...
- 8种常见SQL错误用法,你中招了吗?
作者:db匠 来源:https://yq.aliyun.com/articles/72501 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句, ...
- SQL中to_char方法的应用
1.取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; ----------------- ...
- CF1216X
由于rating限制,和慎老师用小号打了一场div 3 从A到F都没啥思维含量..感觉最难想的就是C了?? CF1216C 考完以后想hack一下这道题,然后发现满屏都是分类讨论 我大概是写不动 or ...
- vue $attrs 父组件和孙子组件的传值,传函数
上一篇我们说到provide/inject的依赖注入的传值方法,今天我们来说一下另一个父组件给孙子组件的传值方式$attrs 我们接着上一个例子继续来写 parent父组件 我们给child子组件穿了 ...
- texi2dvi - 打印 Texinfo 文档
SYNOPSIS 总览 texi2dvi [OPTION]... FILE... DESCRIPTION 描述 依次从 Tex 系统中运行每个 Texinfo 或者 LaTex 文件 FILE,直到解 ...
- Linux账号管理与ALC权限设定(一)
UID 与 GID UID用户的编号 GID 用户群组的编号 账号登录时,有一个对应的文本来记录某个账户的UID与GID.然后获得这个UID去对应的密码文本中,取得密码进行比对,然后登陆. 保 ...