目录

1、一维数组传参

2、二维数组传参


1、一维数组传参

调用方式以及传递参数如下,我们需要考虑的是如何设计这个函数,不同的理解方式会有不同的设计方式。下面就从两个角度来设计

int main()
{int arr[10] = {0};test(arr);   //需要设计的函数是test函数,传递的参数是数组名arr,即首元素地址
}

============ 角度一:传递的是数组 ============

这边传递的是数组名,我们就当作是传了一个数组过去,那函数的形参也需要用数组来接收了,那么函数形参可以这样设计:

void test(int arr[])        // 方式一
{}void test(int arr[10])      // 方式二
{}void test(int arr[100])     // 方式三(语法没问题但是不推荐,让人容易误解)
{}

需要注意的是,形参里数组的大小没有任何意义 ,之前介绍函数栈帧开辟的过程提到,形参只有在需要用到的时候才会被创建,然后去找实参在栈上的地址。

============ 角度二:传递的是指针 ============

数组名其实就是首元素的地址,所以我们也可以当作是传了一个地址过去,那边使用指针来接收。

test(int* arr)
{}

2、二维数组传参

同样的,调用方式以及传递参数如下,下面我们同样从两个角度来设计

int main()
{int arr[3][5] = {0};test(arr);   //需要设计的函数是test函数,传递的参数是数组名arr
}

============ 角度一:传递的是数组 ============

传递数组,数组接收,但是需要注意的是,二维数组不能省略列,但是可以省略行,因为二维数组在存储的时候,是先存满一行,然后再存下一行,因此一行有多少列必须要明确。

void test(int arr[3][5])        // 方式一
{}void test(int arr[][5])      // 方式二
{}

============ 角度二:传递的是指针 ============

传递地址,指针接收。数组名表示首元素地址,这个没错,但是二维数组的首元素地址不是第一行第一列的元素的地址,而是第一行的地址!

也就是说,如果我们要以指针的形式传递二维数组的话,其实传递的是第一行的数组的地址,此时我们就可以使用 数组指针。声明数组指针的时候,我们需要知道,指向的数组有多大(大小是5),数组元素类型是什么(int类型)

  • 首先声明一个变量ptr,这个变量是指针类型,即 *ptr
  • 然后指向一个数组,数组大小是5,即 *ptr[5]
  • 最后补上这个数组的元素类型,即 int *ptr[5]
void test(int (*ptr)[5])
{}
// void test(int** arr)        //error
// {}

为什么不合适呢?你要用一个二级指针去接收一个数组的地址,这肯定是不行的,如果你用一个二级指针去接收一个一级指针变量的地址,指针接收指针地址,这个是没有问题的。

数组传参(一维数组、二维数组)相关推荐

  1. 第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)...

    一维数组:1:/*数组:1. 数组是一种引用类型2. 数组是一种简单的数据结构,线性的机构3. 数组是一个容器,可以用来存储其他元素,4. 数组也是可以存储任意数据类型的元素5. 数组分为:一维数组, ...

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

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

  3. 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法

    目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...

  4. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  5. 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的

    <c primer pius>第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处 ...

  6. php 二维数组中去重,PHP实现二维数组去重功能示例

    PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...

  7. Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true

    8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的.编写一个方法,如果m1和m2相同的话,返回true 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 8. ...

  8. 二维数组和指针(包含交换二维数组行列)

    有必要对a[i]的性质作进一步说明.a[i]从形式上看是a数组中的第i个元素.如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容.a[i]是有物理地址的,是占内存单元的.但如果a是 ...

  9. C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)

    1. 二维数组的定义 type 数组名[行][列] 2. 二维数组的初始化 2.1 全部初始化为0 char chAry[2][3] = { 0 }; 实例: #include <stdio.h ...

最新文章

  1. C++ 判断点是否在圆的内部
  2. 【svn老玩家翻车了,git玩的不够6】git恢复本地误删的文件
  3. boost::adjacency_matrix用法的测试程序
  4. ActionScript接收socket服务器发送来的数据
  5. qDebug格式化输出类型
  6. 作为面试官的一些经历,希望能给找工作的朋友一些参考
  7. [Java] 变量里存的到底是什么
  8. markdown与latex:单行式子中连加连乘i放在下面\displaystyle
  9. vue各路径,组件都没问题,但页面空白
  10. 混合整数规划线性规划——Matlab例程
  11. js实现数组翻转(倒序输出)
  12. 【物理学术竞赛】——绳上的球(再续)
  13. R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
  14. 中图分类法----O 数理科学和化学
  15. 青龙面板2.8版本+Ninja 保姆级 服务器安装jd代挂教程——(二)
  16. JAVA_OPTS讲解【转】
  17. Numpy的tile函数
  18. 冥土追魂(暴力枚举)
  19. 中国房价不可能下降的19个理由
  20. 这些常见的漏洞和修复方法你知道吗?

热门文章

  1. 2019年5大企业网盘对比
  2. ubuntu U盘只读的修复办法
  3. oracle里面的long,long raw,raw,clob,blob区别
  4. 如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构
  5. 解决Cannot invoke “java.sql.Connection.prepareStatement(String)“because “this.conn“ is null
  6. 关于 @Aspect 注解的使用
  7. CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!
  8. Activity的生命周期和启动模式--Activity的生命周期的全面分析
  9. 英特尔携手浪潮、锐捷网络和Silicom,构建强大的IPU生态系统
  10. Django admin后台美化(极其简单)