
C99标准之前是不可以这么声明数组的,但是C99开始引入了变长数组这一概念,也就是使用变量定义数组各维,也就是你可以用 int a[x]这种方式定义数组,x的值无需是常量,但是有几个主要限制:
1:必须在函数内部声明或者是函数参数(也就是必须在存储在栈区),也不能是成员变量
2:不能在声明的同时初始化
3:不能是静态变量或用extern修饰
4:数组的类型以及长度的类型都必须支持sizeof(一般来说就是只能用内部类型)
大部分支持C99的编译器都支持这个特性(VC2005之后,GCC3.2之后),这个和new出来的数组还是本质上不一样的,这个其实是程序在运行期间在进程栈区生成定长数组,所以也不需要你手动释放,但这种做法对一些高级的调试方法可能有一定的影响
所以不建议新手这么使用,除非你的程序明确需要这个数组要存储在栈区同时又只能是变长数组(多半是为了性能)
new命令是C++的专用命令,用来动态分配内存空间。 相当于C语言中的malloc()函数功能。用new创建动态数组的应用过程:
1、定义指针变量
2、获得数组长度
3、用new分配相应的内存空间
4、使用动态数组
5、不再使用该内存时,释放指针,相应命令为:delete
参考代码:
#include<iostream>using namespace stdint main(){int *parr=NULL int num=0 cout <<"input num: "cin >>numparr=new int[num]//分配一个具有num个int元素的数组空间for( int i=0i<numi++ )parr[i]=i*ifor( int j=0j<numj++ )cout <<parr[j] <<" " cout<<endl delete []parr//释放数组,注意[]return 0}
//动态定义一维数组、二维数组、三维数组#include<iostream>
#include<ctime>
using namespace std
int main()
{
int hight , row , col
register int i , j , k
srand((unsigned)time(NULL))
cout<<"输入一维数组的行"<<endl
cin>>row
//动态定义一维数组
int *p1
p1 = new int [row]
//输入一维数组的值
for( i = 0 i < row i ++ )
p1[i] = rand () % 10
//输出一维数组
for( i = 0 i < row i ++ )
cout<<p1[i] <<' '
cout<<endl
//释放一维数组
delete [] p1
cout<<"输入二维数组的行,列 :"
cin>>row >>col
//动态定义二维数组
int **p2
p2 = new int*[row]
for( i = 0 i < row i ++ )
p2[i] = new int[col]
//输入二维数组的值
for( i = 0 i < row i ++ )
for( j = 0 j < col j ++ )
p2[i][j] = rand() % 10
//输出二维数组
cout<<"输出二位数组:"<<endl
for( i = 0 i < row i ++ )
{
for( j = 0 j < col j ++ )
cout<<p2[i][j]<<' '
cout<<endl
}
//释放二维数组
for( i = 0 i < row i ++ )
delete []p2[i]
delete []p2
cout<<"输入三维数组高,行,列 : "
cin>>hight>>row >> col
//动态定义三维数组:
int *** p3
p3 = new int**[hight ]
for( i = 0 i < hight i ++ )
p3[i] = new int*[row]
for( i = 0 i < hight i ++ )
for( j = 0 j < row j ++ )
p3[i][j] = new int[col]
//输入三维数组值:
for(i = 0 i < hight i ++ )
for(j = 0 j < row j ++ )
for( k = 0 k < col k ++)
p3[i][j][k] = rand()%10
//输出三维数组:
cout<<"输出三维数组"<<endl
for(i = 0 i < hight i ++ )
{
for( j = 0 j < row j ++ )
{
for( k = 0 k < col k ++ )
cout<<p3[i][j][k]<<' '
cout<<endl
}
cout<<endl
}
//释放三维数组
for( i = 0 i < hight i ++ )
for( j = 0 j < row j ++ )
delete []p3[i][j]
for( i = 0 i < hight i ++ )
delete []p3[i]
delete []p3
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)