输入m×n矩阵并排序各列元素和各列

实现对输入m×n矩阵的排序,遵循如下规则:
(1)首先将矩阵内每一列的元素值,按照从小到大的顺序排列;
(2)然后将矩阵的各个列按照该列元素之和从小到大的顺序排列,并将排序后的矩阵输出。 如果某些列元素和相同,则按原来顺序排列。
要求:编写函数order(int m, int n, int *matrix),m和n分别为矩阵的行数和列数,matrix为存放矩阵元素的数组(一维或二维均可)
我先写了列元素排序的函数,但是好多错误,怎么改正

#include 
#include 
using namespace std;
int main () {
    int n,m,j,k,str[100][100],(*p)[100];
    p=str;
    void  order(int m, int n, int *str);
        scanf("%d %d",&m,&n);
    
        for(j=0; jfor(k=0; kscanf("%d",*(p+j)+k);}}
                

    order(m,n,*p);
    return 0;
}
 void order(int m, int n, int *str){
     int j,k,sum[100]={0};
    
      for (int j=0;jsort(str[j],str[j]+m);
       for(j=0; jfor(k=0; kprintf("%d",*(*(&str+j)+k));
            }    
            printf("\n");
        }
      
               return ;}

问题确实挺多的,一个个都帮你指出来挺麻烦的,我先说一下关键的问题吧
题目说“matrix为存放矩阵元素的数组(一维或二维均可)”,那我就当参数int* matrix的类型可以修改
函数order(int m, int n, int* matrix),matrix如果是一级指针,说明是想通过一维数组的方式来表示一维和二维数组,实际上二维数组的存储方式就是把每一行按顺序放在一维数组里,所以可以用一维数组来表示二维矩阵。
如果matrix改用二级指针,例如你这里定义的str[100][100],那么函数order应该为order(int m, int n, int* matrix[100]),这样改对你来说改动最小。如果题目不允许修改matrix参数的类型,那就要大改。下面只说能修改成int* matrix[100]类型以后的错误

        for(j=0; j<m; j++){
               for(k=0; k<n; k++){
                printf("%d",*(*(&str+j)+k));
            }    
            printf("\n");
        }

这里的&str就没有必要了,改为

printf("%d",*(*(str+j)+k));

以及main函数中的order(m,n,* p);改为order(m,n,p);