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数组。