C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!

如题所述

第1个回答  2019-02-19

在子函数申请二维数组,主函数使用,可以用动态申请。

方法不止一种,我这里用指针的指针实现二维数组。

二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。

#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;
}

相似回答