汉扬编程 编程大纲 C|三种方法创建二维动态数组

C|三种方法创建二维动态数组

相对来说,创建二维动态数组比一维动态数组更复杂些,可以分别在以下三种情况下创建二维动态数组:已知一维、已知二维、或两者都未知:

#include <stdio.h>#include <stdlib.h>const int rows=3;const int Cols=4;void arr2D(int** arr,int rows,int cols){ int i,j; for(i=0;i<rows;i++) // 赋值 for(j=0;j<cols;j++) arr[i][j]=i*cols+j+1; for(i=0;i<rows;i++) // 输出 for(j=0;j<cols;j++) printf("%4d",arr[i][j]); printf("\\n");}int main(){ int i,j;// 1 利用指针数组生成一个rows*cols的动态二维数组,但第一维rows是固定的一个常量 int* p[rows]; // const int rows=3; int cols; printf("请输入二维数组的列数(默认%d行):",rows); scanf("%d",&cols); for(i=0;i<rows;i++) { p[i]=(int*)malloc(sizeof(int)*cols); if(p[i]==NULL) exit(1); } for(i=0;i<rows;i++) // 赋值 for(j=0;j<cols;j++) p[i][j]=i*cols+j+1; for(i=0;i<rows;i++) // 输出 for(j=0;j<cols;j++) printf("%4d",p[i][j]); printf("\\n"); for(i=rows-1;i>=0;i–) // 释放 free(p[i]); // 2 利用二维指针,生成一个rs*cs的二维动态数组 int** pp; int rs,cs; printf("请输入二维数组的行数和列数(间隔空格):"); scanf("%d %d",&rs,&cs); pp=(int **)malloc(sizeof(int *) * rs); if(pp==NULL) { printf("pp is null"); exit(1); } for(i=0;i<rs;i++) { pp[i]=(int*)malloc(sizeof(int)*cs); if(pp[i]==NULL) exit(1); } arr2D(pp,rs,cs); for(i=rs-1;i>=0;i–) free(pp[i]); free(pp);// 3 利用数组指针(行指针)生成一个Rows*Cols的动态二维数组,但第二维Cols是固定的一个常量 int (*parr)[Cols]; // const int Cols=4; int Rows; printf("请输入二维数组的行数(默认%d列):",Cols); scanf("%d",&Rows); parr=(int(*)[Cols])malloc(sizeof(int)*Rows*Cols); if(parr==NULL) exit(1); for(i=0;i<Rows;i++) // 赋值 for(j=0;j<Cols;j++) p[i][j]=i*Cols+j+1; for(i=0;i<Rows;i++) // 输出 for(j=0;j<Cols;j++) printf("%4d",p[i][j]); printf("\\n"); free(parr); getchar();getchar(); return 0;}/*output:请输入二维数组的列数(默认3行):4 1 2 3 4 5 6 7 8 9 10 11 12请输入二维数组的行数和列数(间隔空格):3 4 1 2 3 4 5 6 7 8 9 10 11 12请输入二维数组的行数(默认4列):3 1 2 3 4 5 6 7 8 9 10 11 12*/-End-

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6607.html

漫画:为什么Java里面的String对象是不可变的?

(C二维数组怎么定义)C|三种方法创建二维动态数组

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部