C语言中动态分配内存

什么是内存动态分配:全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域。所谓动态分配内存指的是C语言允许建立内存动态分配区域,需要时开辟,不需要时释放,这个动态存储区成为堆。


怎样建立内存的动态分配:主要有四个库函数:malloc   calloc   free  realloc

        1.malloc函数    void  *malloc(unsigned  int  size)

           作用是在内存中分配一个长度为size的连续空间,返回值是指针。如果分配失败,返回NULL。

        2.calloc 函数    void  *calloc(unsigned  n, unsigned   size)

           作用是在内存中分配n个长度为size的连续空间,返回起始地址。若果分配失败,返回NULL。用calloc函数可以建立动态数组,n为数组元素个数,size为每个元素的长度。

        3.free函数         void  *free(void  *p)

           释放由p所指向的动态存储区,无返回值。

         4.realloc函数   void  *realloc(void  *p,unsigned   int   size)

           用于改变有malloc或者calloc开辟的动态区域的大小。若失败,则返回NULL。


注意:除free函数外,每个函数的返回值都是void *  型的指针。在使用这几个函数时,要进行强制类型转换。这几个函数同在C++中的<cstdlib>中。


void 指针类型:不指向任何具体的数据。不要理解为指向任意类型,而是空类型,不指向任何类型,需要强制转换才能赋值给其他类型的指针。


例子源代码:


#include<iostream>
#include<cstdlib>
using namespace std;


int main()
{
    void check(int *);  //由于函数出现在定义之前,故需要申明 
    int *p1,i;          //p1为指向整型变量的指针 
    void *p2;           //p2为指向void型的指针 
    p2=malloc(5*sizeof(int));//sizeof()为求类型的字节数 
    p1=(int *)p2;       //强制类型转换 
    for(i=0;i<5;++i)
        scanf("%d",p1+i); //随机访问 
    check(p1);
    free(p2);             //释放p2所指向的区域 
}


void check(int *p)    
{
     int i;
     printf("They are fail:");
     for(i=0;i<5;++i)
         if(p[i]<60)printf("%d",p[i]);
     printf("\n");


知识总是要一点一点积累的,欲速则不达...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值