C++一维数组与二维数组

    科技2022-07-12  123

    一维数组创建

    #include<iostream> #include<iomanip> using namespace std; const int COL = 3; void display(int *arr,int n){ for(int i=0;i<n;i++){ cout<<arr[i]<<"\t"; } cout<<endl; } // 函数外部,默认以0初始化 int arr[10]; int main() { // 一维数组动态创建 int N = 10; //对非动态创建的数组 // 1.使用int q[10]={0};可以将其用0初始化 // 2.若使用其他数字会出现不确定的结果 // 3.在函数内部使用:int q[10]; 而不初始化,会出现不确定的结果 // 4.但是在方法函数外部, 使用int q[10]; 则会默认以0初始化 int q[10] = {0}; //输出全是0 display(q,N); //输出全是0 display(arr,10); //动态创建一维数组, 默认用0初始化 int *ptr = new int[N]; //输出全是0 display(ptr,N); for(int i=0;i<10;i++){ //赋初值 ptr[i] = i; } display(ptr,N); }

    一维数组类型的参数传递与输出

    #include<iostream> #include<iomanip> using namespace std; //声明函数类型,参数为一维数组 void display(const int [],int); int main() { int inum = 10; // 类型推断,也可以直接进行自动转换 float fnum = static_cast<float>(inum); // cout<<fnum<<endl; int a[3]={1,2,3}; // 一维数组参数传递 display(a,3); } //函数参数为const,则不能修改 //或者 display(const int *x,int n) void display(const int x[],int n){ for(int i=0;i<n;i++){ // 设置域宽,计算宽度把输出内容也算在里面 // 默认左对齐,循环输出则需要放在里面,当setw放在输出内容后面时,则先输出后再计算宽度 cout<<x[i]<<setw(10); } cout<<endl; }

    二维数组创建

    主要包括非动态数组的创建,动态数组的创建

    #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; } } }
    Processed: 0.011, SQL: 8