`
默默pig
  • 浏览: 54320 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

动态数组

 
阅读更多

动态数组


定义:
利用“指针”和“内存空间分配函数”,根据用户的需求,动态且恰当地利用内存空间。

优点:
能够有效地利用内存空间。

缺点:
创建方式麻烦,使用时易混淆,且最后需要释放内存空间(否则易造成内存泄漏,而数组不用)。

使用原则:
1. 创建需从外到里。
2. 释放需从里到外。(释放指针所指向的空间,free函数接受的参数是指针)

使用方法:
以三维数组int array[n1][n2][n3]={0}为例,其对应的动态数组的创建如下:
int n1,n2,n3,i,j,k;
int ***array;       //创建一个动态的三维数组需声明一个三维指针array。
/*创建从外到里*/
array = (int***)calloc(n1,sizeof(int**));
for(i=0;i<n1;i++)
{
array[i] = (int**)calloc(n2,sizeof(int*));
for(j=0;j<n2;j++)
{
array[i][j]=(int*)calloc(n3,sizeof(int));
/*此层循环是初始化动态数组(为数组赋值),而外两层是为动态数组分配内存空间。*/
for(k=0;k<n3;k++)   
array[i][j][k]=0;    //array[i][j][k]存储的是一个int值
}
}

/*释放从里到外*/
for(i=0;i<n1;i++){
for(j=0;j<n2;i++)
free(array[i][j]);
free(array[i]);
}
Free(array);

以二维数组int array[n1][n2]={0}为例,其对应的动态数组创建如下:
int n1,n2,i,j;
int** array;      //创建一个动态的二维数组需要声明一个二维指针array。
array=(int**)calloc(n1,sizeof(int*));
for(i=0;i<n1;i++)
{
array[i]=(int*)calloc(n2,sizeof(int));
for(j=0;j<n2;j++)
array[i][j]=0;
}
/*释放从里到外*/
for(i=0;i<n1;i++)
free(array[i]);
free(array);

以一维数组int array[n1]=0为例,其对应的动态数组创建如下:
int n1,i;
int* array;    //创建一个动态的一维数组需要声明一个一维指针array。
/*创建从外到里*/
array=(int*)calloc(n1,sizeof(int));
for(i=0;i<n1;i++)
array[i]=0;

/*释放从里到外*/
free(array);


思考:
1. 指针和数组的区别。

2.声明和定义的区别。
声明只是创建了某个类型的变量,并且告知编译器。而定义是在声明的基础上,还为变量分配内存空间。所以创建一个数组不能说声明一个数组,而应该说定义一个数组。
3. malloc和calloc的使用。
同:都能分配内存空间,并返回一个指针(地址),函数头都是<stdlib.h>。
异:
1.malloc只能接受一个参数,calloc接受两个参数,但使用效果可以相同。如: malloc(num*sizeof(type))和calloc(num,sizeof(type));
    2.当成功分配内存空间时,calloc首先会将内存空间存储的值初始化为0,而malloc不会。

 

分享到:
评论

相关推荐

    如何在vc中创建动态数组

    在VC++环境中,动态数组是一种在程序运行时根据需要分配内存的方法,这使得程序员能够根据实际情况灵活地控制数组的大小。动态数组的概念基于C++中的指针和内存管理,特别是new和delete运算符。以下是如何在VC++中...

    动态数组的使用快速创建数组(VB6.0代码编写)

    动态数组在编程中是一种非常重要的数据结构,尤其在VB6.0这种早期的Visual Basic版本中,它提供了灵活的内存管理方式,允许程序员在运行时调整数组的大小。本篇文章将深入探讨动态数组的使用、创建及VB6.0中的实现...

    vc++6.0中动态数组实现(例如string类对象数组等)[文].pdf

    VC++6.0 中动态数组实现 在 VC++6.0 中,动态数组实现是指在运行时动态地分配数组,而不是在编译时固定数组长度。这种实现方式可以让程序在执行时根据需要动态地分配数组长度。 动态数组实现的重要特点是: 1. ...

    动态数组的实现(利用动态数组增长实现的)

    动态数组是一种在编程中常用的内存管理技术,它允许我们在运行时根据需要调整数组的大小。在C语言中,我们通常通过使用指针和`malloc()`、`realloc()`、`free()`等函数来实现动态数组。下面我们将深入探讨动态数组的...

    用C语言创建动态数组

    ### 用C语言创建动态数组 在C语言中,数组是一种基本的数据结构,它能够存储相同类型的数据元素。然而,标准C语言中的数组是固定大小的,在声明时必须指定其大小,这限制了它们在某些场景下的应用。例如,当我们不...

    C C++ C++ Builder创建动态数组

    在C++和C++ Builder中,动态数组是一种非常重要的数据结构,它允许程序员在程序运行时根据需要分配和管理内存。动态数组与静态数组不同,静态数组在编译时其大小就已经固定,而动态数组则可以在运行时动态改变大小。...

    VB 动态数组实例

    在VB(Visual Basic)编程语言中,动态数组是一种非常重要的数据结构,它允许程序员在运行时根据需要调整数组的大小。动态数组的概念是相对于静态数组而言的,静态数组在声明时必须指定固定的大小,而动态数组则可以...

    动态数组的实现与重用

    ### 动态数组的实现与重用 #### 引言 在C++编程中,数组是一种常用的数据结构,用于存储相同类型的多个元素。然而,在C++中声明的数组大小一旦确定就无法更改,这种限制在实际开发过程中可能会带来不便。例如,当...

    java动态数组的应用

    ### Java动态数组的应用 在Java编程语言中,动态数组是一种非常重要的数据结构,它能够根据实际需求自动调整其大小,从而有效地存储和管理元素。在本文中,我们将深入探讨Java中的动态数组,包括其实现原理、应用...

    c语言动态数组的实现方法

    在C语言中,动态数组是一种在程序运行时根据需要分配内存的方法,这与静态数组在编译时就确定大小有所不同。动态数组的实现主要依赖于内存管理函数`malloc()`、`calloc()`、`realloc()`和`free()`。下面将详细讨论`...

    动态数组C++实现2

    在C++编程语言中,动态数组是一种非常重要的数据结构,它允许程序员在程序运行时根据需要动态地分配和释放内存。动态数组的概念与传统的静态数组不同,静态数组在编译时就必须确定其大小,而动态数组则可以在运行时...

    动态数组末班类源代码

    在C++编程中,动态数组是一种能够根据需要自动调整大小的数组。动态数组类的实现通常基于内存管理,包括分配和释放内存空间。本压缩包包含的“动态数组末班车类源代码”提供了这样一个实现,它是一个泛型类,允许...

    动态数组 很全很详细

    根据给定的信息,我们可以总结出以下关于动态数组的知识点: ### 动态数组概述 动态数组是一种可以在运行时改变大小的数组类型。与固定大小的数组不同,动态数组允许在程序执行过程中添加或删除元素,这使得它们...

    关于VB中的数组教程,数组的概念,动态数组的建立与声明

    本教程将深入探讨数组的概念、动态数组的建立与声明,帮助你更好地理解和运用VB中的数组。 首先,我们要理解数组的基本概念。数组是由相同类型的数据元素构成的有序集合,每个元素都有一个唯一的索引,通过这个索引...

    数据结构中的动态数组模版类

    动态数组是一种在编程中常用的线性数据结构,它与普通数组相比,具有自动调整大小的能力。在C++中,我们可以创建一个模板类来实现动态数组的功能,以支持各种类型的数据。下面将详细介绍动态数组模版类及其核心功能...

    动态数组 学习C++的经典例子

    动态数组在C++编程中是一种常见的数据结构,它允许程序员在程序运行时调整数组的大小。与静态数组不同,静态数组在声明时就需要指定固定的大小,而动态数组可以在需要时进行扩展或收缩,提供了更大的灵活性。这个...

    用动态数组实现的大数阶乘

    本篇文章将详细讲解如何利用动态数组来实现大数阶乘的计算,以及在这个过程中涉及的一些关键知识点。 首先,我们要理解什么是动态数组。动态数组是一种可以在运行时改变其大小的数组,它与静态数组不同,静态数组在...

    返回MFC动态库函数动态数组

    2. **函数接口设计**:为了在DLL中返回动态数组,函数的返回类型不能直接是动态数组,因为C++不允许返回动态分配的对象。一种常见的解决方法是返回数组的指针,同时通过参数传递数组的大小。例如: ```cpp extern ...

    动态数组的一个小例子

    动态数组是一种在编程中常用的内存数据结构,它允许在运行时改变其大小。与固定大小的数组不同,动态数组可以在需要时自动扩展或收缩,从而提供了更大的灵活性。在这个例子中,我们将探讨如何在Linux环境下使用C语言...

Global site tag (gtag.js) - Google Analytics