C++动态数组再总结

动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。

1.变长一维数组


实现变长数组最简单的是变长一维数组,你可以这样做:

//文件名:array01.cpp

#include<iostream>
using namespace std;
int main(){
int len;
cin>>len;//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间

int*p=new int[len]

;...........delete[]p;
return0;
}

注意int*p=newint[len];这一句,你不能这样做:int p[len];C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。

而且这样也不行:
int p[]=new int[len];

编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=new int[len];

array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。


当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组:

//文件名:array02.cpp

#include<iostream>
#include<vector>
using namespace std;

int main(){

int  len;
cin>>len;
vector<int>array(len);//声明变长数组
for(int i=0;i<len;i++)
array[i]=i;
cout<<array[i]<<"\t";
}

return0;
}

2.动态指针数组


在构造函数中分配空间:
arr = new TYPE*[size];
for(int k=0; k<size;k++)
  arr[k] = new TYPE;
在析构函数中回收资源:
for(int k=0;k<size; k++)
  delete arr[k];
delete []arr; 

再来一个示例:
#include <iostream>
using namespace std;
int main()
{
 int ** arr;
 arr = new int* [3];
 for (int k=0; k<3; k++)
 {
  arr[k] = new int;
  cin>>*arr[k];  
 }
 for (int k=0; k<3; k++)
  cout<<*arr[k]<<" ";
 cout<<endl;

 for (int k=0; k<3; k++)
  delete arr[k];
 delete []arr;

 return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值