数组传参(一维数组、二维数组)
目录
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. 数组是一种引用类型2. 数组是一种简单的数据结构,线性的机构3. 数组是一个容器,可以用来存储其他元素,4. 数组也是可以存储任意数据类型的元素5. 数组分为:一维数组, ...
- java二维数组如何传参_C语言中二维数组作为函数参数来传递的三种方法
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include void func(int n, char str[ ][5] ) { i ...
- 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法
目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...
- c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义
C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...
- 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的
<c primer pius>第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处 ...
- php 二维数组中去重,PHP实现二维数组去重功能示例
PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...
- Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true
8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的.编写一个方法,如果m1和m2相同的话,返回true 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 8. ...
- 二维数组和指针(包含交换二维数组行列)
有必要对a[i]的性质作进一步说明.a[i]从形式上看是a数组中的第i个元素.如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容.a[i]是有物理地址的,是占内存单元的.但如果a是 ...
- C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)
1. 二维数组的定义 type 数组名[行][列] 2. 二维数组的初始化 2.1 全部初始化为0 char chAry[2][3] = { 0 }; 实例: #include <stdio.h ...
最新文章
- C++ 判断点是否在圆的内部
- 【svn老玩家翻车了,git玩的不够6】git恢复本地误删的文件
- boost::adjacency_matrix用法的测试程序
- ActionScript接收socket服务器发送来的数据
- qDebug格式化输出类型
- 作为面试官的一些经历,希望能给找工作的朋友一些参考
- [Java] 变量里存的到底是什么
- markdown与latex:单行式子中连加连乘i放在下面\displaystyle
- vue各路径,组件都没问题,但页面空白
- 混合整数规划线性规划——Matlab例程
- js实现数组翻转(倒序输出)
- 【物理学术竞赛】——绳上的球(再续)
- R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
- 中图分类法----O 数理科学和化学
- 青龙面板2.8版本+Ninja 保姆级 服务器安装jd代挂教程——(二)
- JAVA_OPTS讲解【转】
- Numpy的tile函数
- 冥土追魂(暴力枚举)
- 中国房价不可能下降的19个理由
- 这些常见的漏洞和修复方法你知道吗?
热门文章
- 2019年5大企业网盘对比
- ubuntu U盘只读的修复办法
- oracle里面的long,long raw,raw,clob,blob区别
- 如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构
- 解决Cannot invoke “java.sql.Connection.prepareStatement(String)“because “this.conn“ is null
- 关于 @Aspect 注解的使用
- CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!
- Activity的生命周期和启动模式--Activity的生命周期的全面分析
- 英特尔携手浪潮、锐捷网络和Silicom,构建强大的IPU生态系统
- Django admin后台美化(极其简单)