二级指针动态内存分配

二级指针动态内存分配

背景

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 %d*%d array:\n"
输入m,n的格式:"%d,%d"
输入成绩的格式:"%d"
输出提示信息和格式:"maxScore = %d, class = %d, number = %d\n"


输入:
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语言中通常使用“二级指针”来实现。

简单来说,需要先申请一个用来存放“行指针”的数组,然后再为每一行申请存放“具体数值”的空间。


二级指针动态内存分配
http://example.com/2025/12/17/二级指针动态内存分配/
作者
王柏森
发布于
2025年12月17日
许可协议