二维数组的传参调用写法
初遇二维数组作函数参数,宛如自己化身为了大头儿子。很头大。
不禁大声呐喊:该怎么声明定义,该怎么调用,又该怎么函数中操作元素和地址?
在此,我要拨开这些问题的一些迷雾。
我相信,有心人看完后,再遇就不会怕了。
其实声明,定义是一样的。因此,只写声明。
同时,把元素外层*()剥去就代表地址。因此只写元素。
最后有总结。
二维数组作函数参数,依我看来,至少可以分成三种。
事先,在main函数中 int a[m][n];
好了,进入主题。
第一种形参为二维数组
声明
void function(int a[m][n]);//函数声明
void function(int a[][n]);//不论多少维数组,第一维都可省略。
//凭什么,第二维就不可省略呢?由编译器的寻址方式决定。
1
2
3
4
调用
function(a);//函数调用 实参直接写数组名!数组名!(重点)。
//(注意)function(a[m][n])或function(a[][n])都不可以!
//话说,写数组名多好,简单轻松。
1
2
3
4
5
在函数操控元素
1. *(a[i] + j) //代表第 i 行 第 j 列
2. *(*(a+i) + j) //同上
3. *((int *)a +i*n +j )//同上,n表示第二维数组长度,即列宽
//不管怎么样,a[i][j]不被允许。也是由编译器的寻址方式决定。
1
2
3
4
5
第二种形参为数组指针
(其实只是 声明定义 与第一种不同,其他一样)
声明
void function(int (*a)[n]);
//不是(int *a[n])(指针数组) ,而是(int (*a)[n])(数组指针);
// 缘由是 [] 的 优先级比 *的大
1
2
3
调用
function(a);//函数调用 实参同样直接写数组名!
//(注意)function(a[m][n])或function(a[][n])同样都不可以!
1
2
3
在函数操控元素
1. *(a[i] + j) //代表第 i 行 第 j 列
2. *(*(a+i) + j) //同上
3. *((int *)a +i*n +j )//同上,n表示第二维数组长度,即列宽
//a[i][j]不被允许。由编译器的寻址方式决定。
1
2
3
4
5
第三种形参为二级指针
声明
void function(int **a,int n);n表示第二维数组长度,即列宽
1
调用
function( (int **)a,int n);//实参不能为数组名!*与上面相反*!有两个 * !
//(注意)function(a)或function((int *)a)不可以!
1
2
3
在函数操控元素
*((int *)a +i*n +j )//只有一种!n表示第二维数组长度,即列宽
//其他不被允许。由编译器的寻址方式决定。
1
2
3
总结
声明定义(分三种)。
二维数组,数组指针,二级指针。(都是指针)
调用(一对一,二对二)
数组指针,二维数组就写一级指针即 数组名.
二级指针就写二级指针即 (int**)数组名
在函数中操作元素(注意二级指针,只能用最后的方法)
*(a[i] + j) //代表第 i 行 第 j 列
*( *(a+i) + j) //同上
*( (int * )a +i * n +j )//n表示第二维数组长度(列宽)
也就是说 3. 是万能的。
声明,定义是一样的。
同时,把元素外层()剥去就代表地址。
二维数组的传参调用写法相关推荐
- C/C++ 一维数组的传参/一级指针的传参 二维数组的传参/二级指针的传参 三维数组的传参/三级指针的传参 方法总结分析终极篇
序 最近复习c/c++数组的传参,发现了一些问题,下面是一些总结和思考 正文 一维数组的传参/一级指针的传参/普通指针 在理解指针的基础上,一维数组的指针传递很简单,我们知道数组的数组名就是这个数组首 ...
- 二维数组的传参【01_数组指针_指向数组的指针】
2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...
- C/C++语言二维数组的传参方法总结
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8886687,作者:gqb666 C/C++语言将二维数组 ...
- java二维数组如何传参_C语言中二维数组作为函数参数来传递的三种方法
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include void func(int n, char str[ ][5] ) { i ...
- 微信小程序生成二维码之传参(接收的参数乱码该咋解决)
先说我的案例,我需要的是,扫码进入不同的区域展示(因此这个就需要进行二维码路径传参),大致思路:接收数据,然后根据所接收的数据进行判断,展示不同的区域. 我是用的草料二维码生成的 - https:// ...
- 二维数组的传参数的方法
如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维 ...
- 小程序 输入框输入 扫描二维码读取二维码内容 传参实现
1.wxml页面 <view class="groupmsg"><view class="content">客户批次:</view ...
- 【概念辨析】二维数组传参的几种可能性
一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针. ...
- C/C++二维数组总结
1.关于定义二维数组 先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组.比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示.这样的 ...
最新文章
- python给用户输出提示_python3.4控制用户输入与输出的方法
- WPF-002 下拉列表的简单实现
- 用Genymotion来调试android应用
- Python 删除文件中的乱码
- [codeup 2143] 迷瘴
- 如何用Java的Robot完成模拟鼠标移动和键盘输入(可应用刷网课)
- python姿态识别_基于深度学习的人体姿态识别算法总结
- 世界上最好的惯性动作捕捉设备Xsens,你不应该错过的Xsens MVN Animate Pro
- 小仲马《茶花女》读后感
- 真北敏捷会员0002陈旭:身心俱疲的暗黑Scrum
- 「视频」重磅 | Magic Leap再发Demo,凯文·凯利万字长文揭秘
- iOS让App后台运行方法小结
- 【BZOJ4548】小奇的糖果
- 搭建直播平台,你需要先知道这些
- ubuntu下载todesk安装包
- 小程序开发外包需要注意哪些问题?
- Tarjan模板 人工栈版Tarjan
- linux上安装Ubuntu (在苹果笔记本上用了移动硬盘装的)
- libnet编译linux,libnids libpcap libnet 安装
- windows版本Mysql免安装版下载及安装步骤