二维数组
优质
小牛编辑
152浏览
2023-12-01
二维数组
#include <stdio.h>
#include <stdlib.h>
//01.二维数组:
// 1.二维数组的内存存储原理:
// 所有数组,无论一维数组,二维数组,多维数组,在内存当中的
// 存储实质都是采取的连续存储方式
// 2.二维数组的规律赋值方式:
// 先进行行遍历,在进行列遍历,再逐个进行逐个数组元素的具体赋值操作
// 3.如何求取任何数组的内存尺寸?
// 都是采用sizeof();关键字进行的求取
int main01(void)
{
int a[5][5];
//1, 2, 3, 4, 5, 6, 7, 8, 9, 10:总共25个数组元素
printf("%d \n", sizeof(a));//sizeof(数组名);-->求取数组整体的内存尺寸5*5*4
printf("%p \n", a);
int num = 1;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
//a[i][j] = num;
//++num;
//printf("%4d", a[i][j]);
printf("%4d", a[i][j] = num++);//复合语句
}
}
system("pause");
}
//02.二维数组知识详解:
// 1.初始化方式:
// 统一初始化:
// int a[5][4] = {0};-->巧用0
// 前置初始化:
// int a[5][4] = {1}-->特用除0以外的数字
// 注:
// 1.统一初始化方式的实质还是前置初始化方式,由于采用特殊的数字
// 0进行初始化,所以整体被统一的初始化为了0
// 2.所有数组的初始化方式特点:
// 只要数组当中前置元素有数字前置初始化,那么后面的数组元素
// 本身都会被默认的初始化为0
// 2.多维数组的特殊初始化方式:
// 多维数组转化为低维数组进行初始化
// int a[5][4] = {
// {1, 2},
// {1, 2, 3}
// };
// 3.确定数组内存尺寸的两大要素:
// 数组元素个数+数组元素尺寸
// 注:维度的省略情况分析:自动推演
// 一维数组的一维可以省略
// 二维数组的一维不可以省略
// 三维数组的二维不可以省略
int main02(void)
{
//int a[5][4] = { 1 };//全部初始化为0
//printf("%p \n", a);
//int a[5][4] = { 1, 2, 3, 4, 5 };//数组的前面赋值,后面赋值为0,默认是一行一行的进行赋值操作
//int a[5][4] = { {1, 2, 3, 4}, {1, 2} };//二维数组的初始化方式
//int a[5][4] = {0};//全部初始化为0
int a[5][4];//解释:5个一维数组,每个一维数组当中存储有4个数组元素
int b[2][4] = { {1,2},{3,4} };//第一个名曲有几个一维数组,可以进行忽略
//行坐标可以进行忽略,但是列坐标不可以进行忽略
int num = 1;
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 4; ++j)
{
b[i][j] = num++;
}
}
printf("\n\n");
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 4; ++j)
{
printf("%4d", b[i][j]);
}
}
system("pause");
}
//03.二维数组的线性初始化方式:
// 奥数规律方式
// 元素个数+求模(变化慢)+求余(变化快)+被除数是(列数)
int mai03n(void)
{
int intArrArr[3][4];
//规律初始化方式:
// 00 0 01 1 02 2 03 3
// 10 4 11 5 12 6 13 7
// 20 8 21 9 22 10 23 11
for (int i = 0; i < 12; ++i)//i:决定元素个数
{
intArrArr[i / 4][i % 4] = i;//行:变化慢;列:变化快
}
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 4; ++j)
{
printf("%3d", intArrArr[i][j]);
}
printf("\n");
}
system("pause");
}
二维数组中的查找
二维数组matrix中,每一行都从左到右递增排序,每一列都从上到下递增排序,输入一个整数,判断数组中是否含有该整数。
// 1 2 8 9
// 2 4 9 12
// 4 7 10 13
// 6 8 11 15
bool Find(int* matrix, int rows, int columns, int number)
{
bool found = false;
if(matrix != NULL && rows > 0 && columns > 0)
{
int row = 0;
int column = columns - 1;
while(row < rows && column >=0)
{
if(matrix[row * columns + column] == number)
{
found = true;
break;
}
else if(matrix[row * columns + column] > number)
-- column;
else
++ row;
}
}
return found;
}