动态定义多维数组

1.普通数组的定义(维数)

const unsigned int buf_size=512, max_files=20;

int staff_size=27;

const unsigned sz=get_size(); 


char input_buffer[buf_size];//ok,是const变量

string fileTable[max_files+1];//ok,是constant表达式(常量表达式)。

double salaries[staff_size];//error,不是const变量。

int test_scores[get_size()];//error,不是const表达式。

int vals[sz];//error,直到运行阶段才能知道sz的值。

数组的维数必须用值大于等于1的常量表达式定义。此常量表达式只能包含整形字面值常量、枚举常量或者用常量表达式初始化的整形const对象
非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。

2.动态定义一维数组

利用new,生成动态数组,动态数组的维数可以是变量或常量。

#include<iostream>
#include<ctime>
using namespace std ;
int main()
{
int row;
register int i;
srand((unsigned)time(NULL)) ;
cout<<"输入一维数组的行"<<endl;
cin>>row ;
//动态定义一维数组
int *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 ; return 0; }


3.动态生成多维数组

//动态定义二维数组、三维数组
#include<iostream>
#include<ctime>
using namespace std ;
int main()
{
int hight , row , col ;
register int i , j , k ;
srand((unsigned)time(NULL)) ;

cout<<"输入二维数组的行,列 :";
cin>>row >>col ;
//动态定义二维数组
int **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 = 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 ;
}

动态定义二维数组:int **p2=new int* [row];生成一个长度为row的一维指针数组,数组中的每个元素都是int*类型,每个指针可以再指向一个一维int数组。

原文地址:https://www.cnblogs.com/fly1988happy/p/2440472.html