• c/c++ 传统数组的缺点


    专题:  动态内存分配 (所有高级语言,没有C里深刻)  

    传统数组的缺点:  

    • 1.数组长度必须事先指定,而且只能是常整数,不能是变量    

    例子 

    int a[5];  //必须事先指定,而且只能是常整数    
    
    int len = 5; int a[len];//error      
    • 2.传统形式定义的数组,该数组的内存程序员无法手动释放   数组一旦定义,系统为数组分配的内存空间就会一直存在,除非数组所在的函数运行终止。 

    在一个函数运行期间,系统为该函数中的数组分配的空间会一直存在。直到该函数运行完毕时,数组的空间才会被系统自动释放。      

    例子:

    void f(void){int a[5]={1,2,3,4,5};....} 
    
    //数组a 占20个字节的内存空间,程序员无法手动编程释放它,数组a只能在f()函数结束被系统释放 
    •   3. 数组的长度一旦定义,数组长度就不能再更改。   数组的长度不能在函数运行的过程中动态的扩充或缩小 
    •    4. 传统方式定义的数组不能跨函数使用 


      A函数定义的数组,只有在A函数运行期间才可以被其他函数使用, 但A函数运行完毕后,A函数中的数组将无法在被其他函数使用。 

    #include<stdio.h> 
      void g(int * pArr, int len)  
    {  
    pArr[2] = 88; //parr[2]==a[2] 等价于  
        }     void f(void)  
    { 
    int a[5] = {1,2,3,4,5}; //数组a 只在f()执行时有效  g(a,5); 
       printf("%d
    ", a[2]); 
    } 
      int main(void)  
    {  
    f(); // 结果: 88 
    //printf("a[0] = %d
    ", a[0]); // error  return 0; } 

    为什么需要动态分配内存   很好的解决的了传统数组的4个缺陷

    动态内存分配举例_动态数组的构造 难点 

  • 相关阅读:
    回溯算法
    再谈排序与图论算法
    Hash表
    B树和TreeSet与TreeMap
    回顾二叉树
    Spring实战第一部分总结
    Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766
    第一章 机器学习基本概念
    第十至十二章 算法分析--高阶数据结构
    Lucene4.6至 Lucene6.6的每个迭代对API的改动
  • 原文地址:https://www.cnblogs.com/mjorcen/p/3812925.html
Copyright © 2020-2023  润新知