本文共 1349 字,大约阅读时间需要 4 分钟。
动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。
实现变长数组最简单的是变长一维数组,你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 | //文件名: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(向量)也可以实现变长数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //文件名: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; } |
在构造函数中分配空间:arr = new TYPE*[size];for(int k=0; k
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #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 ; } |