原来的代码a[n][n]这个数组的定义使用的是变长数组,今天换个写法,使用动态内存分配。
首先,先奉上原来的写法,这个 写法较为简单,可是变长数组的使用存在很大局限性。
#include<stdio.h>
main()
{
int n,i,j;
scanf("%d",&n);
int a[n][n];
下面用动态内存分配来改写这个二维数组,需要注意一下代码最下端使用free()函数进行内存释放。
#include<stdio.h>
#include<stdlib.h>
main()
{
int n,i,j;
printf("请输入方阵的阶数:");
scanf("%d",&n);
int m=n;
//二维数组动态分配内存
int **a=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++){
a[i]=(int*)malloc(m*sizeof(int*));
}
//初始化方阵的数据
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);}}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j) continue;
else {
a[j][i]=a[i][j]+a[j][i];
a[i][j]=0;}}}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%4d",a[j][i]);
}
printf("\n");
}
//内存释放
for(i=0;i<m;i++){
free(a[i]);
}
free(a);
}