c语言基础题指针二维数组

4.通过完成函数完成以下程序代码,该程序输入m、n,再输入只有一个最小值的m行n列的矩阵,输出矩阵中最小值所在列号(列号从1开始),输入输出示意如下:
3 4
6 2 3 4
5 1 17 8
9 5 5 12
2
【注意】:以下程序代码只允许添加不允许修改。
int* read(int* m, int* n){
}
//输出最小数在矩阵中列号
void print(int* a, int m, int n){
}
int main(){
int m, n;
int* a;
a = read(&m, &n);
print(a, m, n);
free(a);
}

供参考:

#include <stdio.h>
#include <stdlib.h>
int* read(int* m, int* n) {
    int i, j;
    scanf("%d%d", m, n);
    int* a = (int*)malloc(sizeof(int) * (*m) * (*n));
    for (i = 0; i < (*m); i++)
        for (j = 0; j < (*n); j++)
            scanf("%d", a + i * (*n) + j);
    return a;
}
//输出最小数在矩阵中列号
void print(int* a, int m, int n) {
    int i, j, min, k;
    min = *a; k = 0;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            if (min > *(a + i * n + j)) {
                min = *(a + i * n + j);
                k = j;
            }
    }
    printf("%d", k + 1);
}
int main() {
    int m, n;
    int* a;
    a = read(&m, &n);
    print(a, m, n);
    free(a);
}