zoukankan      html  css  js  c++  java
  • 【C/C++】二维数组的传参的方法/二维字符数组的声明,使用,输入,传参

    【问题】
    定义了一个子函数,传参的内容是一个二维数组

    编译提示错误
    因为多维数组作为形参传入时,必须声明除第一位维外的确定值,否则系统无法编译(算不出偏移地址)

    【二维数组的传参】
    方法一:形参为二维数组,并给出第二维长度
    举例:

    #include <stdio.h>
     
    void subfun(int n, char subargs[][5])
    {
        int i;
        for (i = 0; i < n; i++) {
        	printf("subargs[%d] = %s
    ", i, subargs[i]);
        }
    }
     
    void main()
    {
        char args[][5] = {"abc", "def", "ghi"};
        subfun(3, args);
    }
    

    方法二:形参作为指向数组的指针并给出数组长度

    #include <stdio.h>
     
    void subfun(int n, char (*subargs)[5])
    {
        int i;
        for (i = 0; i < n; i++) {
        	printf("subargs[%d] = %s
    ", i, subargs[i]);
        }
    }
     
    void main()
    {
        char args[][5] = {"abc", "cde", "ghi"};
        subfun(3, args);
    }
    

    我用了这个方法:

    方法三:形参为指针的指针
    实参必须有指针,不能为数组名

    #include <stdio.h>
     
    void subfun(int n, char **subargs)
    {
        int i; 
        for (i = 0; i < n; i++) {
        	printf("subargs[%d] = %s
    ", i, subargs[i]);
        }
    }
     
    void main()
    {
        //char* a[3]是一个指针,a[0]存储的是args[0][0]的地址,a[1]存储的是args[1][0]的地址,a[2]存储的是args[2][0]的地址。
        char *a[3];
        char args[][5] = {"abc", "def", "ghi"};
        a[0] = args[0];  //equals with a[0] = &args[0][0];
        a[1] = args[1];
        a[2] = args[2];
        subfun(3, a);  //若此处为subfun(3, args);则会编译出错
    //a的值是a[0]的地址,所以a = &args[0];
    }
    

    上述代码等价于下面代码。

    #include <stdio.h>
     
    void subfun(int n, char **subargs)
    {
        int i; 
        for (i = 0; i < n; i++) {
        	printf("subargs[%d] = %s
    ", i, subargs[i]);
        }
    }
     
    void main()
    {
        char *args[] = {"abc", "def", "ghi"};//equals with char *args[3] = {"abc", "def", "ghi"};
        subfun(3, args);
    }
    

    【总结】二维字符数组的创建和引用的最佳方法
    传参,输出:

    声明还是这样比较易懂:

    上述的第三种方法我还是不太会

    【参考资料】
    C/C++二维数组传参方法总结 https://blog.csdn.net/gqb_driver/article/details/8886687

  • 相关阅读:
    第二章 万变不离其踪--收割自己的深度图
    2.1 光照系统
    2.2 深度渲染机制
    2.3 来点实际--日照分析实现
    2.4 通视分析
    2.5 Cesium视域分析的实现
    2.6
    第三章 讲真,没几个搞得清楚的经纬度——GIS坐标
    3.1 地理坐标系统
    3.2 渲染坐标系统
  • 原文地址:https://www.cnblogs.com/kinologic/p/13958685.html
Copyright © 2011-2022 走看看