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个缺陷

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

原文地址:https://www.cnblogs.com/mjorcen/p/3812925.html