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

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值