• 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; }
  • 相关阅读:
    博客园风格简单修饰(Do It Yourself)
    十大经典排序算法
    物流BOS
    算法设计
    牛客网刷题
    关于上网的问题
    Lucene&Solr
    SSM综合练习
    四十八:WAF绕过-权限控制之代码混淆及行为造轮子
    四十七:WAF绕过-漏洞发现之代理池指纹被动探针
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5504110.html
Copyright © 2020-2023  润新知