C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!
#include<stdio.h>int*sr(void){intarr[3][3];int(*p)[3]=arr;for(inti=0;i<=2;i++)for(int...
#include<stdio.h>
int *sr(void)
{
int arr[3][3];
int (*p)[3] =arr;
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
scanf("%d",*(p+i)+j);
return *p;
}
int main(void)
{int *pp=sr();
printf("123");
return 0;} 展开
int *sr(void)
{
int arr[3][3];
int (*p)[3] =arr;
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
scanf("%d",*(p+i)+j);
return *p;
}
int main(void)
{int *pp=sr();
printf("123");
return 0;} 展开
展开全部
在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。
#include<stdio.h>
#include<malloc.h>
int ** sr(void)
{
int i,j;
int *memory=(int *)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3
int **arr=(int **)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组)
if(!memory || !arr){
printf("内存申请错误!\n");return NULL;}
for(i=0,j=0;i<9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素
arr[j++]=&memory[i];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&arr[i][j]);
return arr;
}
int main(void)
{
int i,j,**arr=sr();
if(!arr)
return 1;
printf("---主函数调用子函数定义的二维数组---\n");
for(i=0;i<3;i++,printf("\n"))
for(j=0;j<3;j++)
printf("%d ",arr[i][j]);
printf("\n---实现二维数组地址连续性---\n");
int *p=&arr[0][0];
while(p<=&arr[2][2])
printf("%d ",*p++);
return 0;
}
展开全部
这样就可以了:
#include<stdio.h>
#include<malloc.h>
int **sr(void)
{ int i,j,**arr;//定义二维指针
arr = (int**)malloc(sizeof(int*) * 3);//为指针申请空间,
for (i = 0; i < 3; i++)//行数
{ arr[i] = (int *)malloc(sizeof(int) * 3);//为每一行申请存储空间
for(j=0; j<3; j++)
scanf("%d",arr[i]+j);
}
return arr;
}
int main(void)
{ int i,j,**pp=sr();
for (i = 0; i < 3; i++)//行数
{ for(j=0; j<3; j++)
printf("%4d",pp[i][j]);
printf("\n");
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询