C语言:二维数组

1. 二维数组的定义

类型名 数组名[常量表达式][常量表达式]

如:int a[3][4];

数组a中含有的元素有:a[0][0], a[0][1], a[0][2], a[0][3],a[1][0], a[1][1], a[1][2], a[1][3], a[2][0], a[2][1], a[2][2], a[2][3]。

2. 二维数组的存储结构

二维数组中的下标变量在内存中的实际存储结构是线性的,不是二维的。想象成有行有列的二维表格形式,只是它们之间的逻辑关系。

以int a[3][4]为例,各个下标变量排列的先后顺序是:先是a[0]的四个变量,再是a[1]的四个变量,最后是a[2]的四个变量。

3.二维数组中下标变量的表示方法

下标法:如a[1][2],表示的是a[1]这个一维数组中的第二个元素。

指针法:如*(*(a+1)+2)。a[1][2]相当于是(a[1])[2],由于x[2]与*(x+2)等价,所以(a[1])[2]与*(a[1]+2)等价,这时候再把a[1]换成*(a+1),就可以得到*(*(a+1)+2)。

混合法:如*(a[1]+2),*(a+1)[2]。

4. 二维数组的引用

(1)二维数组中的下标变量在表示时,要么有两个*,要么有两对[],有么有一个*和一个[]。*和[]都用来降维,当维数降为0时,就是变量。

(2)每次只能使用数组中的一个下标变量,若要操作多个下标变量,需要分多次进行操作。

cpp 复制代码
int a[2][3],i,j;
for(i=0;i<=1;i++)
    for(j=0;j<=2;j++)
    a[i][j]=0;

5. 二维数组的初始化

(1)给所有下标变量赋初值

cpp 复制代码
int a[2][3]={1,2,3,4,5,6};

(2)可以给每行数据再加一对大括号

cpp 复制代码
int a[2][3]={{1,2,3},{4,5,6}};

(3)可以省略第一个[ ]中的表达式,省略时,编译器自动填上。

cpp 复制代码
int a[][3]={1,2,3,4};    //相当于int a[2][3];
int a[][3]={{1,2},{3},{4}};    //相当于int a[3][3];

(4)可以只对部分下标变量赋初值

cpp 复制代码
int a[2][3]={1,2,3};    //下标变量的值依次为1,2,3,0,0,0
int a[][3]={{1,2},{1}};    //下标变量的值依次为1,2,0,1,0,0
相关推荐
zhangjw343 小时前
Java基础语法:变量、数据类型与运算符,从原理到实战
java·开发语言
算法鑫探6 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
yaoxin5211236 小时前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
java·开发语言·python
WBluuue6 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
NotFound4866 小时前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
木子墨5166 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
浅时光_c7 小时前
14 结构体 共用体 枚举类型
c语言
Ava的硅谷新视界7 小时前
用了一天 Claude Opus 4.7,聊几点真实感受
开发语言·后端·编程
rabbit_pro7 小时前
Python调用onnx模型
开发语言·python
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌