二级指针动态内存分配
背景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,计算最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。 输入提示信息: "Input array size m,n:" "Input 输入m,n的格式:" 输入成绩的格式:" 输出提示信息和格式:"maxScore =
输入: Input array size m,n:2,3 Input 2*3 array:↙ 90 69 88 97 95 95 maxScore = 97, class = 2, number = 1↙
|
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <stdio.h> #include <stdlib.h>
int main(void) { int m,n; int **score;
printf("Input array size m,n:"); scanf("%d,%d",&m,&n);
score=(int**)malloc(m*sizeof(int*)); if(score==NULL){ return 1; } for(int i=0;i<m;i++){ score[i]=(int*)malloc(n*sizeof(int)); if(score[i]==NULL){ return 1; } }
int script[]={0,0},max_score=0; printf("Input %d*%d array:\n",m,n); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%d",&score[i][j]); if(score[i][j]>max_score){ max_score=score[i][j]; script[0]=i; script[1]=j; } } } printf("maxScore = %d, class = %d,number = %d\n",max_score,script[0]+1,script[1]+1); for (i = 0; i < m; i++) { free(score[i]); } free(score);
return 0; }
|
二维动态数组的内存分配在C语言中通常使用“二级指针”来实现。
简单来说,需要先申请一个用来存放“行指针”的数组,然后再为每一行申请存放“具体数值”的空间。