动态数组
动态数组是相对于静态数组而言,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。
malloc 和calloc 和 realloc 的区别:
malloc和calloc(两者都是动态分配内存)
用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,而calloc则进行了初始化,calloc分配的空间全部初始化为0;
区别:主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
calloc:
函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。
realloc :
char *p;
p=(char *)realloc(p,sizeof(char)*n);
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int *p;
p=(int *)malloc(n*sizeof(int));
for(int i=0; i<n; i++)
{
scanf("%d",&p[i]);
}
for(int i=0; i<n; i++)
{
printf("%d%c",p[i],i<n-1?' ':'\n');
}
free(p);
}
}
malloc ——>free(p);
new———>delete p;
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int *p=new int [n];
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
for(int i=0;i<n;i++)
{
printf("%d%c",p[i],i<n-1?' ':'\n');
}
delete p;
}
}