动态存储--堆分配--数组

本文对比了静态数组与动态数组的特点,并重点介绍了动态数组的概念及其使用场景。文章详细阐述了malloc、calloc和realloc函数的区别,以及如何利用这些函数进行有效的内存分配与释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态数组
动态数组是相对于静态数组而言,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值