c语言二维数组传递

c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法

/*********************************
* 方法1: 第一维的长度可以不指定 *
* 但必须指定第二维的长度 *
*********************************/
void fun(int a[][3], int n, int m)
{
    int i, j;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("%d ", a[i][j]);

        printf("
");
    }
}
/*****************************************
*方法2: 指向一个有5个元素一维数组的指针 *
*****************************************/
void fun(int(*a)[3], int n, int m)
{
    int i, j;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("%d ", a[i][j]);
        printf("
");
    }
}

前面两种方法是必须指明所有维数大小或者省略第一维的。还有一种是网上一直有指针的指针来传递,我用vs2013试了一下,代码如下;

void fun(int **a, int n, int m)

 这个直接用fun(a,3,3)是出错的

所以,我另想一个方法,因为数组是顺序存储,所以我们只要传数组的第一个地址过去就可以得到其他,具体看下面代码

#include<stdio.h>
void
fun(int *a, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { printf("%d ", *(a + i*m + j)); } printf(" "); } } int main() { int a[3][3] = { { 1, 2 }, { 3, 4, 5 }, { 6 } }; printf("%d %d ",a,a[0]); fun(*a,3,3);//fun(a[0][0],3,3) fun(a[0],3,3)这三种都可以 return 0; }
原文地址:https://www.cnblogs.com/lsgsanxiao/p/5504110.html