直接上代码:

  #include

  void Fun(int *a[],int m,int n)//

  {

  printf("%d\t",*a);//[0][0]

  /*

  int e[2][2][2]={8,7,6,5,4,3,2,1};

  int *f,***g;

  g=e;

  f=e;//有警告。但不会报错

  printf("%d\n",*f);

  */

  }

  /*解释:

  Fun()中的int *a[2]表示定义指针数组a[2],a[0],a[1]存储的都是指针,

  a表示的是数组的首地址,所以相当于二级指针。(解释了实參为什么要是二级指针)

  a既然是指针。赋值时。实參的指针值复制给a,于是*a就表示a[0][0];

  指针的等级仅仅能说明指针的多级指向也是指针,传參时会检查指针等级是否匹配

  但指针存储的都是地址值,地址值改变以后,如指向存储int型数据的存储空间,那么

  前面加*就表示的便是这个int型数

  不同等级的指针之间能够赋值。(解释了*a=4,但**a是错的)*/

  void Fun1(int (*a)[],int m,int n)//int **a会有警告

  {

  printf("%d\t",**a); //int (*a)[2]能够全然用数组来操作

  //int (*a)[] 仅仅能用指针来操作数据

  }

  /*假设为int (*a)[];数组指针,指向数组的指针,二级指针;

  表示数组a[]的地址,老谭称之为"行指针"*/

  int main()

  {

  int a[3][2]={4,5,6,1,2,3};

  Fun((int **)a,3,2);//

  Fun1(a,3,2);//(int **)

  return 0;

  }

总结:

  1.函数传參:形參就是对实參的简单复制

  2.数组传參不能检查数组的长度(定义的大小)

  3.二维数组传參(多维数组能够转化为二维或一维数组):

  1.强制转化为一维指针,一维数组

  2.通过行指针

  3.强制转化为二维指针(没有意义)。传參之后都仅仅能通过指针寻址訪问。数组形式不再适用。

  所以假设行数和列数都不确定的二维数组传參没有必要变成二维数组。

由于传參以后也要依照一维数组的方式进行寻址,所以不如直接强制转化为一维数组。

  对于列数确定的二维数组能够传參转化为二维数组。

  如形參定义为int a[][6]; 传參之后还能够像原来的实參一样,通过数组的形式訪问,非常方便。

  4.数组以非引用类型的传递时。此时数组会自己主动转换为同类型的指针。即初始化为对应类型实參的副本。

  调用函数时。函数实际操作的是指针的副本,而不会改动实參指针的值,可是能够通过指针改变数组元素的值。--来自网络

  //我的观点:引用传递也是简单的复制,仅仅只是是多了一级指针。能够通过指针操作目标数据(验证后看来是对的)

  引用传递:(来自百度百科)

  在C++中。函数參数的传递方式有引用传递。

  所谓引用传递是指在调用函数时将实际參数的地址传递到函数中。那么在函数中队參数所进行的改动,将影响到实际參数。

  5.參数传递:

  在完毕一定功能的函数,參数传递时,假设须要改变实參,最好通过引用传递实现对实參的操作和改变。返回值最好用来返回函数的运行状态 。以方便在调用函数中检查被调用函数的运行情况,并进行提示。

关于C语言中二维数组传參————————【Badboy】的更多相关文章

  1. [语法]C语言中二维数组做输入参数

    C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如 ...

  2. C语言中二维数组如何申请动态分配内存

    C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc. ...

  3. C语言中二维数组声明时,探究省略第一维的原因

    我们在使用二维数组作为参数时,我们既可以指明这个数组各个维度的维数,同时我们也可以省略一维,但是二维却不能省略.why呢?由于编译器原理的限制,在一个数组Elemtype test[m][n]中,访问 ...

  4. Pascal 语言中二维数组:矩阵问题

    [题目]方阵填数:在一个 N*N的方阵中,填入 1,2..... N*N个数,并要求构成如下格式: 图例:10 11 12  1            9  16 13  2            8 ...

  5. c语言二维数组传递

    c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...

  6. php 二维数组传递给 js 问题解决记录

    需求: php从数据库中读取到二维数组.传递到js中 实现步骤: php:json_encode  →   json  →  js:eval 即在php中使用json_encode()将php的二维数 ...

  7. C++中二维数组的动态分配

    C++中二维数组的动态分配 作者:   来源:csdn博客   公布者:admin 时间:2009-04-23 13:55:03   点击:115 C++中一维数组的动态分配十分经常使用,但C++刚開 ...

  8. C语言中二维字符数组的定义和初始化

    本篇日志关于二维字符数组的定义和初始化.我相信这篇文章属于菜鸟级的,高手请直接无视. 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: ][MAX_LEN ...

  9. C语言二维数组作为函数参数

    设有整型二维数组a[3][4]如下:0   1   2   34   5   6   78   9  10  11 它的定义为:    int a[3][4]={{0,1,2,3},{4,5,6,7} ...

随机推荐

  1. 【12】Firefox 快捷键大全及更改和定制快捷键的方法

    [12]Firefox 快捷键大全及更改和定制快捷键的方法 答: Firefox 本身没有提供更改和定制快捷键的选项,若有需要,请安装扩展 Keyconfig 来解决.  安装地址如下: Keycon ...

  2. Leetcode1--->数组中两数之和等于给定数

    题目: 给定一个数组nums,目标数target.在数组中找到两数之和为target的数,返回两数的下标举例: Given nums = [2, 7, 11, 15], target = 9, Bec ...

  3. 大数据学习——akka学习

    架构图 重要类介绍 ActorSystem 在Akka中,ActorSystem是一个重量级的结构,他需要分配多个线程,所以在实际应用中,ActorSystem通常是一个单例对象,我们可以使用这个Ac ...

  4. [uiautomator篇][exist 存在,但click错误]

    uiautomator定位页面元素是,定位存在的;但是click的时候,发现点的位置不对,(不知道是android系统的问题还是uiautomator的问题,初步怀疑是系统的问题)

  5. Can not issue data manipulation statements with executeQuery().解决方案

    这个错误提示是说无法发行sql语句到指定的位置 错误写法: 正确写法: excuteQuery是查询语句,而我要调用的是更新的语句,所以这样数据库很为难到底要干嘛,实际我想用的是更新,但是我写成了查询 ...

  6. 【Luogu】P2766最长不下降子序列问题(暴力网络流)

    题目链接 水题qwq,数据都那么水. 我要是出数据的人我就卡$n^3$建图. qwq. 然而这么水的题我!居!然!没!有!1!A!!还!提!交!了!五!遍!!! md从现在开始要锻炼1A率了 看我从今 ...

  7. 备忘 CSS字体中英文名称对照表

    转载自:http://www.jb51.net/css/67658.html 在CSS文件中,我们常看到有些字体名称变成了乱码,这是由于编写者将中文字体的名字直接写成了中文,并且再上传或者拷贝复制的时 ...

  8. Vue列表渲染,改变数据视图层监测不到的问题

    由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue 当你修改数组的长度时,例 ...

  9. 标准C程序设计七---43

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. hdu 2462(欧拉定理+高精度快速幂模)

    The Luckiest number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...