初遇二维数组作函数参数,宛如自己化身为了大头儿子。很头大。

不禁大声呐喊:该怎么声明定义,该怎么调用,又该怎么函数中操作元素和地址?

在此,我要拨开这些问题的一些迷雾。
我相信,有心人看完后,再遇就不会怕了。

其实声明,定义是一样的。因此,只写声明。
同时,把元素外层*()剥去就代表地址。因此只写元素。
最后有总结。

二维数组作函数参数,依我看来,至少可以分成三种。

事先,在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. 是万能的。
声明,定义是一样的。
同时,把元素外层()剥去就代表地址。

二维数组的传参调用写法相关推荐

  1. C/C++ 一维数组的传参/一级指针的传参 二维数组的传参/二级指针的传参 三维数组的传参/三级指针的传参 方法总结分析终极篇

    序 最近复习c/c++数组的传参,发现了一些问题,下面是一些总结和思考 正文 一维数组的传参/一级指针的传参/普通指针 在理解指针的基础上,一维数组的指针传递很简单,我们知道数组的数组名就是这个数组首 ...

  2. 二维数组的传参【01_数组指针_指向数组的指针】

    2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...

  3. C/C++语言二维数组的传参方法总结

    原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8886687,作者:gqb666 C/C++语言将二维数组 ...

  4. java二维数组如何传参_C语言中二维数组作为函数参数来传递的三种方法

    c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include void func(int n, char str[ ][5] ) { i ...

  5. 微信小程序生成二维码之传参(接收的参数乱码该咋解决)

    先说我的案例,我需要的是,扫码进入不同的区域展示(因此这个就需要进行二维码路径传参),大致思路:接收数据,然后根据所接收的数据进行判断,展示不同的区域. 我是用的草料二维码生成的 - https:// ...

  6. 二维数组的传参数的方法

    如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维 ...

  7. 小程序 输入框输入 扫描二维码读取二维码内容 传参实现

    1.wxml页面 <view class="groupmsg"><view class="content">客户批次:</view ...

  8. 【概念辨析】二维数组传参的几种可能性

    一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针.         ...

  9. C/C++二维数组总结

    1.关于定义二维数组 先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组.比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示.这样的 ...

最新文章

  1. python给用户输出提示_python3.4控制用户输入与输出的方法
  2. WPF-002 下拉列表的简单实现
  3. 用Genymotion来调试android应用
  4. Python 删除文件中的乱码
  5. [codeup 2143] 迷瘴
  6. 如何用Java的Robot完成模拟鼠标移动和键盘输入(可应用刷网课)
  7. python姿态识别_基于深度学习的人体姿态识别算法总结
  8. 世界上最好的惯性动作捕捉设备Xsens,你不应该错过的Xsens MVN Animate Pro
  9. 小仲马《茶花女》读后感
  10. 真北敏捷会员0002陈旭:身心俱疲的暗黑Scrum
  11. 「视频」重磅 | Magic Leap再发Demo,凯文·凯利万字长文揭秘
  12. iOS让App后台运行方法小结
  13. 【BZOJ4548】小奇的糖果
  14. 搭建直播平台,你需要先知道这些
  15. ubuntu下载todesk安装包
  16. 小程序开发外包需要注意哪些问题?
  17. Tarjan模板 人工栈版Tarjan
  18. linux上安装Ubuntu (在苹果笔记本上用了移动硬盘装的)
  19. libnet编译linux,libnids libpcap libnet 安装
  20. windows版本Mysql免安装版下载及安装步骤

热门文章

  1. 判断图片色彩模式 CYMK || RGB
  2. 浅谈Lattepanda
  3. Vue常用的内置指令的底层细节分析
  4. 如何在 Win上写 Python 代码?最佳攻略来袭
  5. Android Content开头的Uri和文件绝对路径互相转换
  6. AIX-IBM UNIX
  7. java中验证码发送_实现短信验证码的发送[JAVA]
  8. linux一次系统调用时间,Linux系统调用—时间和日期
  9. 信息安全导论 实验一 古典密码学
  10. DOM基本知识及DOM查询