主要包括非动态数组的创建,动态数组的创建
#include<iostream> #include<iomanip> #include<cstdlib> #include<ctime> using namespace std; //这里是二维动态数组,分配的空间不是连续的 //必须是动态分配的才能传入 **p这种形式的参数 void display(int **p, int row,int col) { for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { cout<<p[i][j]<<"\t"; } cout<<endl; } } //第一种方式:空间不连续 int test() { const int ROW = 2; const int COL = 3; //非动态创建,ROW,COL必须是const为常数 int arr[ROW][COL]; //动态创建 int **ptr = NULL; int drow=2,dcol=3; //分配行 ptr = new int *[drow]; //传入时间作为随机数种子,每次运行结果都会不同 srand(time(0)); for(int i=0; i<drow; i++) { //分配列 ptr[i] = new int[dcol]; //赋值 for(int j=0; j<dcol; j++) { // 用随机数初始化 ptr[i][j] = rand()%100+1; // cout<<ptr[i][j]<<"\t"; } } //二维动态数组输出方式 display(ptr,drow,dcol); //动态分配的数组需要删除 for(int i=0; i<drow; i++) { delete []ptr[i]; } //分配的空间要逐一删除 delete []ptr; } //第二种方式,空间连续 void test_2(){ int row = 4; int col = 3; int **p = new int *[row]; //p[0]看作首地址 p[0] = new int[row*col]; //依次分配 p[1],p[2]...空间 for(int i=1;i<row;i++){ p[i] = p[i-1]+col; } //使用 int k = 0; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ p[i][j] = k; k += 1; } } //输出结果 // for(int i=0;i<row;i++){ // for(int j=0;j<col;j++){ // cout<<p[i][j]<<"\t"; // } // cout<<endl; // } //空间是连续的直接删除 delete []p[0]; // 动态分配,所以第一个参数可传入指针 display(p,row,col); } int main() { // test(); test_2(); }主要有两种参数传递主要有两种方式:
指定列的大小进行参数传递使用一维数组方式传递 #include<iostream> #include<iomanip> using namespace std; void show(float a[][3],int); void show_2(float *p, int row,int col); const int COL = 3; int main() { // 二维数组参数传递及输出 float b[2][COL] = {{3.14159,2.732,5.256},{3.333,4.44,5.77}}; show(b,2); // 二维数组变为一维数组输出 // show_2(b[0],2,COL); } //二维数组,COL参数与实际的一致,必须是数字或const类型 //这个数组不是动态分配,不能使用形如show(float **a,int row,int col)这种形式,因为这个不能直接转为指针 void show(float a[][COL],int row){ for(int i=0;i<row;i++){ for(int j=0;j<COL;j++){ cout.width(10); // 设置为定点小数格式,保留2位小数点,输出刑如:3.14 // cout<<setiosflags(ios_base::fixed)<<a[i][j];可简化为fixed cout<<fixed<<setprecision(2)<<a[i][j]; } cout<<endl; } // 设置对齐方式,设置左对齐 // cout<<setiosflags(ios_base::left)<<endl; // 清除左对齐 // resetiosflags(ios_base::left); } //二维数组输出变为一维数组输出 void show_2(float *p, int row,int col){ for(int i=0;i<row*col;i++){ cout<<*p++<<"\t"; if((i+1)%col==0){ cout<<endl; } } }