C 语言之二维数组(详细版)

目录

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 列 数字不足自动补 0
	int 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语言之一维数组(详细版)》,请点击此处进行查阅…

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值