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

C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!
方法不止一种,我这里用指针的指针实现二维数组。二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。include<stdio.h>#include<malloc.h>int ** sr(void){ int i,j; int *memory=(int *)malloc(sizeof(int)*9);...

C语言编程。编写一个实现将3*3的二维数组表示的方阵进行顺时针旋转90°...
int a[3][3]= {11,22,33, 44,55,66, 77,88,99};rotate(a);printf(“after transform\\n”);for (i=0;i<3;i++){ for (j=0;j<3;j++)printf(“%d\\t”,a[i][j]);}

c语言中怎样输入一个3*3的二维数组存储到文件中在文件中按顺序输出二...
include<stdio.h>#include #define N 3 \/\/N定义数组的大小void ShellSort(int a[],int n)\/\/直接插入排序:对含有n个整数的数组a[]进行从小到大排序{ int i,j,t; for(i=1;i<n;i++) for(j=i-1;j>=0&&a[j]>a[j+1];j--) { t=a[j]; a[j]=a[j+1]...

写一函数使给定的一个二维数组(3*3)转置即行列互换并在主函数中调用该...
int mat[3][3];printf("Please input a 3*3 matrix.\\n");for(int i = 0; i < 3; i++)for(int j = 0; j < 3; j++)scanf("%d", &mat[i][j]);trans(mat);for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++)printf("%d ", mat[i][j]);prin...

如何用C语言程序编写“利用函数将给定的3*3二维数组转置”
usingnamespacestd;void zhuang zhi(int a[3][3]){int m,n,i;for(m=0;m<2;m++)for(i=0;i<3;i++){if(m!=1||i!=0){n=a[i][m];a[i][m]=a[m][i];a[m][i]=n;} } } int main(){ inta[3][3];inti,j...

编写一个函数,功能是将一个二维数组(3X3)转置,即行列互换(转置),用函数...
include<stdio.h>void fun(int a[3][3]){int x,y,m,n,b[3][3];for( x=0;x<3;x++) { for( y=0;y<3;y++) { b[y][3-x-1]=a[x][y]; } } printf("打印置换后的二维数组\\n");for( m=0;m<3;m++) { for( n=0;n<3;n++) { printf("%d ",b[m...

定义一个3行3列的二维数组,求二维数组中的最大值与最小值(用函数做 ou...
void fun(int a[3][3],int *max, int *min){ int i,j;max = *min = a[0][0];for (i=0;i<3;i++) for (j=0;j<3;j++){ if (a[i][j] > *max) *max = a[i][j];if (a[i][j] < *min) *min = a[i][j];} } int main(){ int a[3][3]={1,2...

写一个函数,使给定的一个二维数组(3×3)转置,即行列互换.下面的编程...
#define N 3 int array[N][N]; void convert(int array[3][3]) \/*函数类型可定义为void,也可用默认的int*\/ {int i,j,t; \/*因为函数形实参是数组,按地址传递*\/ \/*两个数组所用空间相同,函数无需返回值*\/ for(i=0;i<N;i++) for(j=i+... 展开 是...

用c++编写程序,编写一个3*3矩阵转置的函数,在main()函数中输入数据
1、打开vs2015,新建一个Windows Form窗体程序或者控制台都可以。2、 定义一个名为array1的数组并赋值:double[,] array1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };。3、右键解决方案下的项目名,添加-类,创建一个名为“turnzhi”的类。4、转置类...

c语言中怎么用二维数组作为函数参数
二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:它们是合法且等价,也可以使用如下形式:但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:因为从实参传递来的是数组的起始地址,如果在形参中不...

相似回答
大家正在搜