• 专题:动态内存分配----基础概念篇


    传统数组的缺点:

      1. 数组长度必须是事先定义的,而且必须是常整型,不能是变量。

        例:

          int a[5]; //ok

          int len=5; int a[len]; //error

      2. 传统形式定义的数组,该数组的内存空间程序员无法手动释放

        在一个函数运行期间,系统为该函数中数组所分配的空间会一直存在,直到该函数运行结束,数组的空间

        才会被系统自动释放。

      3. 数组的长度一旦定义,期长度就不能更改

        数组的长度不能再函数运行的过程中动态的扩充或缩小

      4. A函数定义的数组,在A函数运行期间可以被其他函数使用,但A函数运行结束后,A函数中的数组就不能被其他函数使用。

        传统定义的数组不能跨函数使用。

    /****************************************************

     malloc函数的介绍和使用

     malloc:是memory(内存)和allocate(分配)两个单词缩写的。

     ***************************************************/

    #include <stdio.h>

    #include <malloc.h>

    int main(void)

    {  

      int i=5;  

      int * p=(int *)malloc(4);/*         Malloc向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

                        1. 要使用malloc函数必须要声明头文件malloc.h      

                          2. malloc函数只有一个形参,并且形参是整型。        

                        3. 4表示内存分配动态存储空间4个字节。        

                        4. 这行总共占8个字节,系统本身为以p的内容为地址的变量分配了静态的4个字节+p指向的动态内存空间4个字节。        

                        5. malloc只能返回第一个字节的地址        

                        6. p本身所占的内存是静态分配的,p所指向的内存是动态分配的。        

                        7. int * 表示强制转换malloc函数所返回的第一个字节地址的内容的类型。        

                       */  

      *p=5;  //*p代表的就是int类型,只不过和i的分配方式不一样。  

      printf("%d ",*p);  

      free(p);//释放动态内存空间,由程序员来完成的。 

      return 0;

    }

     动态一维数组的输入和输出例子:

      1 #include<stdio.h>

      2 #include<malloc.h>
      3 void malloc_1(int *);
      4 int main(void)
      5 {
      6     int a[5]={1,2,3,4,5};//20 byte
      7     int len;
      8     printf("please input len: ");
      9     scanf("%d",&len);
     10     int * pArr;
     11     pArr=(int *)malloc(4*len);//len==5,20 byte
     12     //*pArr=99;
     13     printf("please input 5 numbers: ");
     14     for(int i=0;i<len;i++)
     15         //scanf("%d",&pArr[i]);
     16         scanf("%d",pArr+i);
     17     *pArr=99;
     18     printf("output is: ");
     19     for(int i=0;i<len;i++)
     20     {
     21         malloc_1(pArr);
     22         printf("pArr[%d]=%d ",i,pArr[i]);
     23     }
     24     //malloc_1(pArr);  
     25         // printf("pArr[%d]=%d ",i,pArr[i]);
     26     free(pArr);
     27     return 0;
     28
     29 }
     30 void malloc_1(int *q)
     31 {
     32     *q=100;
     33 }

  • 相关阅读:
    Java Web(5) Spring 下使用Junit4 单元测试
    聊聊单元测试(三)——Spring Test+JUnit完美组合
    浅谈ELK日志分析平台
    ELK 实现 Java 分布式系统日志分析架构
    ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
    开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
    自动补全下拉框(可输入匹配的下拉框)
    这是一篇满载真诚的微信小程序开发干货
    微服务化的多组件项目,跨地域、分布式版本管理和发布方式
    解放双手,发掘更大的价值:智能化运维
  • 原文地址:https://www.cnblogs.com/fengkui/p/5997365.html
Copyright © 2020-2023  润新知