当前位置:首页 > 内存 > 正文

c语言动态内存分配数组

  • 内存
  • 2024-06-15 07:36:50
  • 5219

一、C++怎么动态分配一个数组并赋值在C++中,所有新关键字都动态放置在堆栈中。方法为:
int*arr=newint[变量或值],
C语言中可以动态放置一个固定长度的数组memset(地址,赋值的值,长度);例如
int*arr=newint[10];memset(arr,0,arr+10);
这样这一行的10个元素全部赋值为0
也可以放动态的,但声明时不能初始化
intarr[variable];与此类似,但不能这样写
intarr[variable]={};如果不使用变量,可以在右边写大括号进行初始化
但是可以也使用循环或memset进行初始化
希望它能帮助你


二、C语言中的动态内存分配的用法举例

函数:在内存的动态存储区域中分配长度size的连续空间的函数。参数是无符号整数,返回值是指向分配的连续存储区域起始地址的指针。

2.释放功能:内存区域总是有限的,所以不能无限制地分配,而且程序必须尽量节省资源,所以如果分配的内存区域没有被使用,就必须将其释放。用于其他变量或程序。在这种情况下,我们将使用free函数。

函数:在内存的动态存储区域中分配n个长度为size的连续空间的函数。该函数返回一个指向已分配区域起始位置的指针,如果分配失败则返回NULL。

扩展信息:

函数运算符:

运算符new用于在系统中申请动态存储,并使用首地址作为运算结果。

指针变量=new数据类型

例:

int*p=newint

该语句的作用是使用new创建内存就是申请一个int类型变量(4字节)并分配首地址。提供变量指针变量p。

用new创建的变量初始值是任意的,也可以通过用new分配内存来初始化。使用格式如下:

指针变量=新数据类型(初始值)。

删除

您可以根据需要分配堆内存。程序的内存需求可能随时发生变化。需要new分配的空间,程序执行尚未完成。此时,之前占用的内存空间必须作为堆内存释放,然后重新分配以供程序的其他部分使用。delete运算符用于释放new分配的内存空间并删除创建的对象。

删除指针变量

指针变量保存新的赋值。内存中首地址

参考:--动态内存分配


三、如何动态分配数组大小?ReDim语句示例
本示例使用ReDim语句为动态数组变量分配和重新分配存储空间。假设OptionBase为1。
DimMyArray()AsInteger'声明一个动态数组。
RedimMyArray(5)'分配5个元素。
ForI=1To5'重复5次。
MyArray(I)=I'初始化一个数组。
NextI
以下语句重新定义数组的大小并清除其元素。
RedimMyArray(10)'调整大小为10个元素。
ForI=1To10'重复10次。
MyArray(I)=I'初始化一个数组。
NextI
以下语句重新定义数组的大小,但不删除任何元素。
RedimPreserveMyArray(15)'已调整为15个元素。
(详细信息请参见下文。)
动态数组
有时您不知道数组应该有多大。所以我希望能够在运行时更改数组的大小。
动态数组可以随时更改大小。在VisualBasic中,动态数组是最灵活、最方便的,可以帮助您有效地管理内存。例如,您可以短时间使用一个大数组,然后在该数组不使用时将内存空间释放给系统。
如果您不使用动态数组,则必须声明一个尽可能大的数组,然后删除不需要的元素。然而,过度使用此方法可能会导致内存运行环境变慢。
要创建动态数组,请按照下列步骤操作:
(要将数组指定为公共数组)使用Public语句声明该数组,或者(将数组设置为模块在模块级别使用Dim语句声明数组(如果您想在模块级别指定它),或者(如果您想将数组指定为本地数组)使用Static或Dim语句声明它:程序。通过添加空维度表动态声明数组。
DimDynArray()
使用ReDim语句分配实际的元素数量。
ReDimDynArray(X+1)
ReDim语句只能出现在过程中。与Dim语句和Static语句不同,ReDim语句是可执行语句,因此应用程序在运行时执行其工作。
ReDim语句支持与固定数组相同的语法。对于每个维度,每个ReDim语句都可以更改元素数量以及上限和下限。但是,数组的大小无法更改。
ReDimDynArray(4to12)
例如,我们使用第一个声明在模块级别创建动态数组Matrix1:
DimMatrix1()AsInteger
然后在该过程中为数组分配空间:
SubCalcValuesNow()
.
.
.
ReDimMatrix1(19,29)
EndSub
这里,ReDim语句将一个20×30整数矩阵分配给Matrix(总元素大小为600)。还有另一种使用变量设置动态数组边界的方法:
ReDimMatrix1(X,Y)
您可以将字符串分配给可变大小的字节。安排。字节数组也可以分配可变长度的字符串。需要注意的是,字符串中的字节数因平台而异。同一字符串在Unicode平台上占用的字节数是在非Unicode平台上占用的字节数的两倍。
保留动态数组的内容
每次执行ReDim语句时,当前存储在数组中的所有值都会丢失。VisualBasi将数组元素的值重置为空(对于Variant数组)、0(对于数字数组)、零长度字符串(对于字符串数组)或Nothing(对于对象数组)。
当您想要为新数据准备数组或减小数组大小以节省内存时,这非常有用。有时您希望更改数组的大小而不丢失数组中的数据。这可以使用带有Preserve关键字的ReDim语句来完成。例如,使用UBound函数通过引用数组的上界来扩展数组,并在不丢失现有元素值的情况下添加元素。
ReDimPreserveDynArray(UBound(DynArray)+1)
使用Preserve关键字时,只能更改多维数组最后一个维度的上限;如果更改任何其他维度的下限或最后一个维度,则会在运行时出错。所以你可以这样编程:
ReDimPreserveMatrix(10,UBound(Matrix,2)+1)
但是你不能这样编程:
ReDimPreserveMatrix(UBound(矩阵,1)+1,10)