找回密码
 中文实名注册
查看: 268|回复: 0

二维数组

[复制链接]

10

主题

17

帖子

74

积分

版主

Rank: 7Rank: 7Rank: 7

积分
74
发表于 2021-8-18 10:53:47 | 显示全部楼层 |阅读模式
本帖最后由 崔贻轩 于 2021-8-18 11:02 编辑

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[j] = a[j]对角矩阵:n阶方阵主对角线外都是零元素。

1、关于定义二维数组
先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组。比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示。这样的矩阵在内存中是以箭头右边的方式存放的,也就是说实际上我们定义的二维数组在内存中仍然像是一维数组那样连续存储的。可以想象为把一个矩阵一层层伸展铺平。
2 、二维数组的传参写法
使用二维数组作为参数,可以有以下几种写法。

1 使用动态分配内存的方式申请空间,可以使用**传递参数
希望在使用二维数组的时候保持良好的编程习惯,使用哪种方法定义的就使用哪种方式传参,这样对于保持良好的编码习惯有好处,对于别人阅读你的代码也有好处。

方法一: 直接确定二维数组的行和列数
/* 可以使用下面的方法来初始化二维数组
* 也就是直接将二维数组铺平,写成一维数组的形式
*/
int array[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

/* 可以使用标准的二维数组的初始化方式
*/
int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
方法二: 不用指明二维数组的行数,但要指明列数
下面的一种写法本质上是定义了一个数组指针。

/* 经典的写法
*/
int array[][4];

/* 一种更帅的写法,本质上是定义了一个数组指针
*/
int (*array)[4];
方法三: 动态分配的方式,这种写法比较灵活,在定义的时候不需要指明二维矩阵的行数和列数
/* 使用动态分配内存的形式,用malloc
*/
int **array // array[M][N]
array = (int **)malloc(M * sizeof(int *));
for(int i = 0; i < M; i++) {
    array = (int *)malloc(N * sizeof(int));
}

// 释放
for(int i = 0; i < M; i++)
    free(array);
free(array);

/* 使用动态分配内存的形式,用new
*/
int **array // array[M][N]
array = new int*[M];
for(int i = 0; i < M; i++) {
    array = new int[N];
}

https://blog.csdn.net/qq_26822029/article/details/85037209






[C++] 纯文本查看 复制代码
#include<cstdio>

#include<iostream>
#include<iomanip>
const int n=3;
using namespace std;
int a [3][4];
int main ()
{
        for (int i=0;i<3;i++)
        {
                for(int j=0;j<4;j++)
                cin>>a[j];
        }
        for (int i=0;i<3;i++)
        {
                for (int j=0;j<4;j++)cout<<setw(5)<<a[j];

                cout<<endl;
        }
        return 0;
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2024-11-21 23:57 , Processed in 0.036237 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表