• 动态内存分配


    (一)内存的动态分配

    全局变量分配在内存中的静态存储区,局部变量分配在内存中的动态存储区(栈)。

    除此之外,c语言中还存在一个临时存放数据的内存动态分配区域(堆)。

    特点:不必在程序的声明部分定义,不必等到函数结束时才释放,可以随时开辟,随时释放;且这些数据只能通过指针来引用。

    (二)4个实现内存动态分布的库函数

    这四个库函数的头文件#include<stdlib.h>
    malloc函数
    void * malloc(unsigned int size)
    在内存的动态存储区分配一个长度为size的连续空间,返回值为分配空间的开头位置,失败则返回null。指针的基类型为void表示不指向任何类型的数据,只提供一个地址。


    calloc函数
    void *calloc(unsigned int n,unsigned int size)
    分配n个长度为size的连续空间。
    calloc常用来为动态数组分配空间,以一维数组为例,n就代表元素个数,size代表每个元素的长度


    free函数
    void free(void *p)
    释放指针变量p所指向的动态空间,此函数无返回值


    realloc函数
    void *realloc(void *p,unsigned int size);
    realloc常用来重新分配,改变p指向的动态空间的大小为size

    (三)动态数组小例子

     1 #include<stdio.h>
     2 #include<stdlib.h> 
     3 int main(){
     4     void check(int *p);
     5     int *p1,i;
     6     p1=(int*)malloc(5*sizeof(int));//将分配的空间的首元素地址给p1 
     7     for(i=0;i<5;i++){
     8         scanf("%d",p1+i);
     9     }
    10     check(p1);
    11     free(p1);  //释放动态分配空间 
    12 }
    13 
    14 void check(int *p){
    15     int i;
    16     printf("不及格成绩为:");
    17     for(i=0;i<5;i++)
    18     if(p[i]<60) printf("%d ",p[i]);
    19     printf("
    "); 
    20 } 

    sizeof(int)是获得当前系统int型数据所占的字节数,
    malloc函数的返回值是void指针类型,先需要指向int型数据时,需要强制转换为int指针类型

    务实,说实话!
  • 相关阅读:
    sql
    Java后台通过传参得到对应的坐标值的方法
    运行第一个大型项目工程时出现的问题
    对sqlserver存储过程合游标循环中的一点心得
    (基于Java)算法之动态规划——矩阵连乘问题
    算法之线性时间选择(最坏情况下)
    算法之快速排序
    算法之合并排序
    算法之二分搜索法
    设计模式之装饰者模式
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/8287186.html
Copyright © 2020-2023  润新知