• 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; }
  • 相关阅读:
    多项式牛顿迭代
    小明A+B
    分拆素数和
    选课时间
    今年暑假不AC
    Lowest Common Multiple Plus
    大小写转换问题(java程序)
    VS 中输入带空格的两个字符串
    整除的尾数
    不要62
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5504110.html
Copyright © 2020-2023  润新知