如何返回一个二维数组----以返回杨辉三角为例

今日刷到关于杨辉三角的题目时,对于返回二维数组的规则有了更进一步了解,一下略作陈述

//因调用函数结束后,函数内定义的二维数组会自动释放空间,因此我们采取动态分配内存的方式
//因动态分配内存返回的指针无法表示二维数组的维数和长度,因此我们还需要两个变量一个记录行个数,一个记录每一行对应的列数
int** generate(int numRows, int* returnSize, int** returnColumnSizes){ int **ans=(int**)malloc(sizeof(int*)*numRows);//为了便于理解,把他想象成行指针 int i=0; *returnSize=numRows; *returnColumnSizes=(int *)malloc(sizeof(int)*numRows); //开辟一块内存空间,大小是numRows个int型,用来保存保存ans数组的i个元素,这个是用来之后操作的
//一个一维数组由两个要素组成 1 数组的首地址,2 数组的长度 而这两个条件分别由另两个数组存储信息
//一个数组时ans 存地址 另一个是returncolumnsizes,这两个
//另外,由于c语言调用函数时独特的传值不传值,因此,出去返回所用的int**ans以外
//所有用到的变量都需要加维,如returnsize 变为*returnsize
//*returncolumnsizes(一维数组即可)变为**returncoumnsizes for(i=0;i<numRows;i++){ ans[i]=(int*)malloc(sizeof(int)*(i+1)); } for(i=0;i<numRows;++i){ ans[i] = malloc(sizeof(int) * (i + 1)); //开辟一块内存空间,大小是i+1,用来保存ans[i][j]的j个数
//返回二维数组,二维数组需要开辟两次 (*returnColumnSizes)[i]=i+1; //返回数组的第i个元素的数组大小是i+1 ans[i][0]=1; ans[i][i]=1; for(int j=1;j<i;j++){ ans[i][j]=ans[i-1][j]+ans[i-1][j-1];
//十分简单的动态规划了,不作细讲 } } return ans; }

  

posted @ 2022-02-01 14:07  红石Hong  阅读(206)  评论(0)    收藏  举报