二维内存分配做函数参数

二维内存做函数参数

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(语言: C)输入n×n阶矩阵(n最大为10),按如下函数原型
/* 函数功能: 计算n×n矩阵中两条对角线上的元素之和 */
int AddDiagonal(int a[N][N], int n);
用函数编程计算并输出其两条对角线上的各元素之和。
**输入提示信息:"Input n:" "Input %d*%d matrix:\n"
**输入格式要求:"%d"
**输出格式要求:"sum = %d\n"
程序运行示例如下:
Input n:5
Input 5*5 matrix:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
sum = 45
注:不允许使用goto语句

代码实现:

函数声明和定义中的函数参数改成int **a

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
43
44
45
46
47
48
49
50
51
52
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 0
#define FAIL 1

int AddDiagonal(int** a, int);

int main(void)
{
int n;
int** a;

printf("Input n:");
scanf("%d", &n);

a = (int**)malloc(n * sizeof(int*));
if (a == NULL) {
printf("Memory allocation failed!\n");
return FAIL;
}
for (int i = 0;i < n;i++) {
a[i] = (int*)malloc(n * sizeof(int));
if (a[i] == NULL) {
printf("Memory allocation failed!\n");
return FAIL;
}
}

printf("Input %d*%d matrix:\n", n, n);
for (int r = 0;r < n;r++) {
for (int c = 0;c < n;c++) {
scanf("%d", &a[r][c]);
}
}
printf("sum = %d\n", AddDiagonal(a, n));

for (int i = 0;i < n;i++) {
free(a[i]);
}
free(a);

return SUCCESS;
}

int AddDiagonal(int** a, int n) {
int sum = 0;
for (int i = 0, j = n - 1;i < n;i++, j--) {
sum += a[i][i] + a[i][j];
}
return !(n % 2) ? sum : sum - a[n / 2][n / 2];
}
1
2
3
4
5
6
7
8
Input n:5
Input 5*5 matrix:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
sum = 45

二维内存分配做函数参数
http://example.com/2025/12/23/二维内存做函数参数/
作者
王柏森
发布于
2025年12月23日
许可协议