#对二维数组分配动态空间
###1.已知二维数组的行(第一维)
#include <stdio.h>
#include <stdlib.h>
/* 已知数组的行数
列数由终端输入
*/
int main(void)
{
int i,j,num;
int *a[3];//已知数组有3行
printf("请输入二位数组的列数:\n");
scanf("%d",&num);//列数由终端输入
for(i=0;i<3;i++)
a[i] = (int *)malloc(sizeof(int)*num);//分配每一行中列的空间
for(i=0;i<3;i++)
{
for(j=0;j<num;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<num;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<3;i++)
free(a[i]);
return 0;
}
###2.已知二维数组的列(第二维)
#include <stdio.h>
#include <stdlib.h>
/* 已知数组的列数
行数由终端输入
*/
int main(void)
{
int i,j,num;
int (*a)[3];//已知数组有3列
printf("请输入二位数组的行数:\n");
scanf("%d",&num);//行数由终端输入
a = (int (*)[3])malloc(sizeof(int *)*num);//分配行的空间
for(i=0;i<num;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<num;i++)
{
for(j=0;j<3;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
free(a);
return 0;
}
###3.已知数组的行数,一次分配所有空间
#include <stdio.h>
#include <stdlib.h>
/* 已知数组的行数
一次分配所有空间
*/
int main(void)
{
int i,j,num;
int *a[3];//已知数组有3行
printf("请输入二位数组列数:\n");
scanf("%d",&num);//行数由终端输入
a[0] = (int *)malloc(sizeof(int)*num*3);//分配总的空间,以a[0]为起始地址
for(i=0;i<num*3;i++)
{
scanf("%d",a[0]+i);
}
for(i=0;i<num*3;i++)
{
printf("%4d",*(a[0]+i));
if((i+1)%num==0) printf("\n");//为了行列显示
}
free(a[0]);
return 0;
}
###4.行列都未知
#include <stdio.h>
#include <stdlib.h>
/*
行列都未知
*/
int main(void)
{
int i,j,num,n;
int **a;
printf("请输入二位数组的行数:\n");
scanf("%d",&num);//行数由终端输入
printf("请输入二位数组的列数:\n");
scanf("%d",&n);//列数由终端输入
a = (int **)malloc(sizeof(int *) * num);//分配指针数组
for(i=0;i<num;i++)
{
a[i] = (int *)malloc(sizeof(int) * n);//分配每个指针所指向的数组
}
for(i=0;i<num;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<num;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
free(a);
return 0;
}
###5.行列都未知,一次分配所有空间
#include <stdio.h>
#include <stdlib.h>
/* 行列都未知
一次分配所有空间
*/
int main(void)
{
int i,j,num,n;
int **a;
printf("请输入二位数组行数:\n");
scanf("%d",&num);//行数由终端输入
printf("请输入二位数组列数:\n");
scanf("%d",&n);//列数由终端输入
a = (int **)malloc(sizeof(int *) * num);//分配指针数组
a[0] = (int *)malloc(sizeof(int) * num * n);//分配总的空间,以a[0]为起始地址
for(i=0;i<num*n;i++)
{
scanf("%d",a[0]+i);
}
for(i=0;i<num*n;i++)
{
printf("%4d",*(a[0]+i));
if((i+1)%n==0) printf("\n");//为了行列显示
}
free(a[0]);
free(a);
return 0;
}
无需说明的说明:这次不再运行了!!