二维动态数组详解

一、二维动态数组c

二维动态数组是 C 语言中数组中非常重要的一种类型,也是应用非常广泛的一种数据结构。在 C 语言中,动态分配二维数组需要注意两点:一是使用malloc, 或calloc函数动态分配内存;二是动态分配内存后,再使用两重循环为每个元素赋值。以下是一个动态分配二维数组的示例代码:

#include 
#include 

int main()
{
    int row = 3, col = 4, i, j;
    int **p = (int **)malloc(row * sizeof(int *));
    for (i = 0; i < row; i++)
         p[i] = (int *)malloc(col * sizeof(int));
    for(i=0;i<row;i++)
        for(j=0;j<col;j++)
            p[i][j] = i+j;

    for(i=0;i<row;i++){
        for(j=0;j<col;j++)
            printf("%d ",p[i][j]);
        printf("\n");
    }
    return 0;
}

二、二维动态数组定义

定义二维数组,它首先是一个数组,该数组又存储了一系列数组,每个数组又存储了若干变量。其定义方式可以是: int a[2][3];,这里就定义了一个2行3列的二维数组a。同样的,我们使用指针也可以定义二维动态数组, int **a;。

三、二维动态数组和矩阵速度

在 C 语言中,使用二维数组可以十分方便地处理矩阵,对于一些矩阵计算可以使用指针运算来加速处理速度。下面是一个二维数组与矩阵运算效率进行比较的代码:

#include 
#include 
#include 

int main()
{
    int row = 10000, col = 10000, i, j, sum = 0;
    int **p = (int **)malloc(row * sizeof(int *));
    clock_t start,end;

    for (i = 0; i < row; i++)
         p[i] = (int *)malloc(col * sizeof(int));

    for(i=0;i<row;i++)
        for(j=0;j<col;j++)
            p[i][j] = 1;

    start = clock();
    for(i=0;i<row;i++)
        for(j=0;j<col;j++)
            sum += p[i][j];
    printf("二维数组求和:%d, 耗时:%ld 毫秒\n", sum, clock()-start);

    int *q = (int *)malloc(row * col * sizeof(int));
    for(i=0;i<row*col;i++)
        q[i] = 1;

    sum = 0;
    start = clock();
    for(i=0;i<row;i++)
        for(j=0;j<col;j++)
            sum += *(q+i*col+j);
    printf("矩阵求和:%d, 耗时:%ld 毫秒\n", sum, clock()-start);

    free(p); free(q); 
    return 0;
}

四、二维动态数组怎么做

二维数组的申明可以写成:
int a[M][N];
其中,M、N表示数组a的行数和列数。定义了一个M行N列的二维数组。
二维数组的访问方法如下:
int value = a[i][j];

五、二维动态数组赋值

1、直接赋值:int a[2][3]={{1,3,5},{2,4,6}};
2、循环赋值:

int i,j;
for(i=0;i<M;i++)
    for(j=0;j<N;j++)
        a[i][j]=2*i+j;

六、二维动态数组声明

声明一个二维数组变量时,必须指定二维数组的行数和列数,这两个数可以使用常量、变量、数值型常数表达式等表示。

七、二维动态数组初始化

对数组初始化的几种常见方式:
1、直接赋值:
int a[2][3]={{1,3,5},{2,4,6}};
2、置0:
int a[2][3]={0};
3、循环初始化:
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;

八、二维动态数组vector

vector可以实现动态二维数组,其中第一维使用resize,第二维使用vector进行动态分配。具体用法如下:

#include 
#include 

using namespace std;

int main()
{
    int dim1 = 2, dim2 = 3;
    vector<vector> a(dim1);
    for (int i = 0; i < dim1; ++i)
        a[i] = vector(dim2);

    for (int i = 0; i < dim1; ++i)
        for (int j = 0; j < dim2; ++j)
            a[i][j] = i+j;

    for (int i = 0; i < dim1; ++i) {
        for (int j = 0; j < dim2; ++j) {
            cout << a[i][j] << "\t";
        }
        cout << endl;
    }
    return 0;
}

九、二维动态数组定义stl

使用stl库定义动态二维数组非常方便,只需要使用vector来定义即可。

#include 
#include 

using namespace std;

int main()
{
    int dim1 = 2, dim2 = 3;
    vector<vector> a(dim1, vector(dim2, 0));

    for (int i = 0; i < dim1; ++i)
        for (int j = 0; j < dim2; ++j)
            a[i][j] = i+j;

    for (int i = 0; i < dim1; ++i) {
        for (int j = 0; j < dim2; ++j) {
            cout << a[i][j] << "\t";
        }
        cout << endl;
    }
    return 0;
}

十、二维动态数组c语言

在 C 语言中,动态分配二维数组需要注意两点:一是使用malloc, 或calloc函数动态分配内存;二是动态分配内存后,再使用两重循环为每个元素赋值。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/269838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-16 13:33
下一篇 2024-12-16 13:33

相关推荐

  • QML 动态加载实践

    探讨 QML 框架下动态加载实现的方法和技巧。 一、实现动态加载的方法 QML 支持从 JavaScript 中动态指定需要加载的 QML 组件,并放置到运行时指定的位置。这种技术…

    编程 2025-04-29
  • Python导入数组

    本文将为您详细阐述Python导入数组的方法、优势、适用场景等方面,并附上代码示例。 一、numpy库的使用 numpy是Python中一个强大的数学库,其中提供了非常丰富的数学函…

    编程 2025-04-29
  • Python返回数组:一次性搞定多种数据类型

    Python是一种多用途的高级编程语言,具有高效性和易读性的特点,因此被广泛应用于数据科学、机器学习、Web开发、游戏开发等各个领域。其中,Python返回数组也是一项非常强大的功…

    编程 2025-04-29
  • Python去掉数组的中括号

    在Python中,被中括号包裹的数据结构是列表,列表是Python中非常常见的数据类型之一。但是,有些时候我们需要将列表展开成一维的数组,并且去掉中括号。本文将为大家详细介绍如何用…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python爱心代码动态

    本文将从多个方面详细阐述Python爱心代码动态,包括实现基本原理、应用场景、代码示例等。 一、实现基本原理 Python爱心代码动态使用turtle模块实现。在绘制一个心形的基础…

    编程 2025-04-29
  • Python二维数组对齐输出

    本文将从多个方面详细阐述Python二维数组对齐输出的方法与技巧。 一、格式化输出 Python中提供了格式化输出的方法,可以对输出的字符串进行格式化处理。 names = [‘A…

    编程 2025-04-29
  • Java创建一个有10万个元素的数组

    本文将从以下方面对Java创建一个有10万个元素的数组进行详细阐述: 一、基本介绍 Java是一种面向对象的编程语言,其强大的数组功能可以支持创建大规模的多维数组以及各种复杂的数据…

    编程 2025-04-28
  • Python数组随机分组用法介绍

    Python数组随机分组是一个在数据分析与处理中常用的技术,它可以将一个大的数据集分成若干组,以便于进行处理和分析。本文将从多个方面对Python数组随机分组进行详细的阐述,包括使…

    编程 2025-04-28
  • Python数组索引位置用法介绍

    Python是一门多用途的编程语言,它有着非常强大的数据处理能力。数组是其中一个非常重要的数据类型之一。Python支持多种方式来操作数组的索引位置,我们可以从以下几个方面对Pyt…

    编程 2025-04-28

发表回复

登录后才能评论