您的位置:首页 > 编程语言 > C语言/C++

C语言中动态分配内存

2013-10-27 10:07 155 查看
什么是内存动态分配:全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域。所谓动态分配内存指的是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");



知识总是要一点一点积累的,欲速则不达...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++