二维数组作为参数传递的有关问题

二维数组作为参数传递的问题

1、当我们使用二维数组作为参数传递的时候,所传递的二维数组的第二项必须为一个常数,否则编译不能通过,int a[][3];

例如:

#include<stdio.h>
#define N 3
int turn(int a[][N])    //注意此处
{
    int i,j,temp;
    temp=0;
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            if(i<j)
            {
                temp   =a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=temp;
            }
        }
    }
}

int main()
{
    int a[3][3]= {{12,2,8},{22,16,4}, {10,6,14}};
    int i,j;
    turn(a);
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

2、一维数组指针作为形参传递,如int (*a)[3],其实二维数组就相当于一位数组的指针,所以这样也是可以的。

#include<stdio.h>
#define N 3
int turn(int (*a)[N])    //注意此处
{
    int i,j,temp;
    temp=0;
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            if(i<j)
            {
                temp   =a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=temp;
            }
        }
    }
}

int main()
{
    int a[3][3]= {{12,2,8},{22,16,4}, {10,6,14}};
    int i,j;
    turn(a);
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。