C/C++二维数组的传参方法总结
C/C++二维数组的传参方法总结
转自:http://blog.csdn.net/gqb_driver/article/details/8886687
C/C++语言将二维数组作为参数传递容易使人迷惑且易出错,本文将常用的几种方法列出,以方便用时查阅。三+一种方法总结如下(GCC验证成功):
方法一:形参为二维数组并给定第二维长度
此方法是最简单最直观的方法,形参与实参一样,容易理解。
举例:
#include <stdio.h> void subfun(int n, char subargs[][5])
{ int i; for (i = 0; i < n; i++) { printf("subargs[%d] = %s\n", 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\n", 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\n", i, subargs[i]); }
} void main()
{ 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);则会编译出错
}
- 上述代码等价于下面代码。当然我们这里只是讨论的二维数组传参问题,下面代码只起扩展作用。
#include <stdio.h> void subfun(int n, char **subargs)
{ int i; for (i = 0; i < n; i++) { printf("subargs[%d] = %s\n", i, subargs[i]); }
} void main()
{ char *args[] = {"abc", "def", "ghi"};//equals with char *args[3] = {"abc", "def", "ghi"}; subfun(3, args);
}
- 方法四:形参为指针+数组的行+数组的列
#include <stdio.h>
#include <stdlib.h>void test(double *p,const int m,const int n)
{for(int i=0;i<m;i++)for(int j=0;j<n;j++)printf("%f, \n",p[i*m+j]);
}int main(int argc, char *argv[])
{double a[2][2]={{1,2},{3,4}};test((double*)a,2,2);return 0;
}
- 但不能如下使用:原因是double** 在堆里new出来的地址并不一定是连续的,而p[i*m+j]是在访问连续地址。
#include <stdio.h>
#include <stdlib.h>void test(double *p,const int m,const int n)
{for(int i=0;i<m;i++)for(int j=0;j<n;j++)printf("%f, \n",p[i*m+j]);
}int main(int argc, char *argv[])
{//double a[2][2]={{1,2},{3,4}};double **a;a = new double*[2];for(int i =0;i<2;i++)a[i] = new double[2];//init for(int i =0;i<2;i++)for(int j =0;j<2;j++)a[i][j] = 1*i+j;for(int i=0;i<2;i++)for(int j=0;j<2;j++)printf("%f, \n",a[i][j]);test((double*)a[0],2,2);for(int i =0;i<2;i++)delete [] a[i];delete [] a;return 0;
}
C/C++二维数组的传参方法总结相关推荐
- C/C++语言二维数组的传参方法总结
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8886687,作者:gqb666 C/C++语言将二维数组 ...
- C/C++ 一维数组的传参/一级指针的传参 二维数组的传参/二级指针的传参 三维数组的传参/三级指针的传参 方法总结分析终极篇
序 最近复习c/c++数组的传参,发现了一些问题,下面是一些总结和思考 正文 一维数组的传参/一级指针的传参/普通指针 在理解指针的基础上,一维数组的指针传递很简单,我们知道数组的数组名就是这个数组首 ...
- 二维数组的传参【01_数组指针_指向数组的指针】
2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...
- java二维数组如何传参_C语言中二维数组作为函数参数来传递的三种方法
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include void func(int n, char str[ ][5] ) { i ...
- 二维数组的传参调用写法
初遇二维数组作函数参数,宛如自己化身为了大头儿子.很头大. 不禁大声呐喊:该怎么声明定义,该怎么调用,又该怎么函数中操作元素和地址? 在此,我要拨开这些问题的一些迷雾. 我相信,有心人看完后,再遇就不 ...
- 微信小程序生成二维码之传参(接收的参数乱码该咋解决)
先说我的案例,我需要的是,扫码进入不同的区域展示(因此这个就需要进行二维码路径传参),大致思路:接收数据,然后根据所接收的数据进行判断,展示不同的区域. 我是用的草料二维码生成的 - https:// ...
- php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
本文实例讲述了PHP按指定键值对二维数组进行排序的方法.分享给大家供大家参考,具体如下: 问题: 有数组: 代码如下: array(0=>array('id'=>1,'price'=> ...
- 用new创建一个二维数组,有两种方法,是等价的
//用new创建一个二维数组,有两种方法,是等价的 一: int (*p)[10] = new int[5][10]; 二: int **p ...
- 通过指针访问二维数组的三种方法
下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...
- 二维数组的传参数的方法
如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维 ...
最新文章
- CH340E USB转串口 IC测试电路
- oracle 函数参数类型,ORACLE 11g中的表值函数? (参数化视图)
- 计算机三级网络技术题库第15套,计算机等级考试理论试题第二十五套
- 使用WPA Supplicant在Ubuntu 18.04/19.04上从终端连接到Wi-Fi的方法
- python代替javascript_Pyjamas - 用python代替javascript编写基于浏览器的应用
- docker 2376端口 CA 认证,并不能阻止服务器成为肉鸡
- v-html可能导致的问题
- 大数据自学好还是培训好?
- Android点击通知进入详情,Android 点击通知进入正在运行的程序
- TG Pro for mac电脑温度管理工具
- 元气骑士 自建服务器,元气骑士远程联机步骤教程一览
- 三大措施助力新华三NGFW争当市场排头兵
- redis学习之redis的发布和订阅
- 一个9年运维的经验之路
- 解决QGIS中GEE插件授权问题
- 秋招能有多卷?看完这篇文章你就懂了
- 魔兽世界以前的服务器找不到了,魔兽世界怀旧服服务器彻底崩溃,玩家游戏人物消失服务器全部不见...
- Gdevops峰会:一起探讨国产分布式数据库的选型与应用
- PanDownload(百度网盘下载工具)最新可用版
- 计算机技术对医学的影响,试议计算机技术在医学中的意义