首页 > 代码库 > c/c++ 传统数组的缺点

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\n", a[2]); }   int main(void)  {  f(); // 结果: 88 //printf("a[0] = %d\n", a[0]); // error  return 0; } 

 

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

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