目录

1.形参是数组的形式

2.形参是指针的形式

3.总结


1.形参是数组的形式

例:

//冒泡排序函数
void bubble_sort(int arr[])
{...
}//调用函数
bubble_sort(arr);

这里进行冒泡排序时调用数组,函数名为bubble_sort,形参为int arr[ ],即形参直接写成数组的形式,这种方式非常直观。虽然写成这样子,但这并不代表数组在传参的时候我们会创建一个数组。为了节省空间,我们在调用数组的时候直接传递数组首地址即可,即数组传参时我们使用一个指针来对其首地址进行接收。

同时,这里int arr[ ]作为参数,可以写上数组大小(例如int arr[10 ]),也可以不写大小,两种方式都可以。

需要注意的是,数组名确实能表示首元素的地址,但是有两个例外。

1.sizeof(数组名),这里的数组名表示整个数组,计算整个数组的大小,单位是字节。但是在函数调用形参时不能直接用sizeof去计算数组大小,因为我们接收的本质上是一个指针变量,所以在函数调用内部sizeof(数组名)计算的是指针的大小。

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

例如:

printf("%p\n", arr);//arr就是首元素的地址
printf("%p\n", arr+1);//得到第二个元素的地址
printf("----------------------\n");
printf("%p\n", &arr[0]);//arr[0]也是首元素的地址
printf("%p\n", &arr[0]+1);得到第二个元素的地址
printf("----------------------\n");
printf("%p\n", &arr);//得到的也是数组首元素的地址
printf("%p\n", &arr+1);
//得到的是数组的首地址加上整个数组大小后的地址,即跳过整个数组

2.形参是指针的形式

例:

void bubble_sort(int* arr)
{...
}

同样的,这里函数名为bubble_sort,但形参为int *arr,这里使用指针来对数组首地址进行接收。与数组直接作为参数相比,这种方式虽然没有那么直观,但两者本质上起到了相同的效果。

3.总结

数组作为函数参数时,其形参可以写为数组的形式,也可以写为指针的形式,两者形式不同,但效果相同。

数组作为函数参数的理解相关推荐

  1. 数组作为函数参数进行传递

    今天编程序时发生了个这样的错误: 在头文件里 定义了一个数组: View Code 1 char s[]="1234567890"; 又定义了一个现显示组的函数: View Cod ...

  2. C语言中数组做函数参数的问题

    数组做函数参数,会退化成为一个指针变量.因此在进行数组参数传递的同时,需要传递一个数组长度的参数变量. 数组长度可以通过sizeof(arr)/siezof(arr[0])来得到.关于这个sizeof ...

  3. 6.指针数组做函数参数

    一维数组名也是一个地址,即指针,只不过数组名是一个常量指针,常量指针即不能修改该指针的值!所以看字符数组的赋值与字符指针的赋值就明白了! void main() {int a[5] = { 0,1,2 ...

  4. 数组名作为函数的参数 与数组作为函数参数的区别

    数组元素作为函数的实参时,像形参变量传递的是数组元素的值,而用数组名作为函数的实参时,向形参(数组名或指针变量)传递的是数组首元素地址.参考如下代码可以更好的理解. 1数组名作为函数的参数 //1有一 ...

  5. C语言 二维数组作为函数参数的4种方式

    前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...

  6. c/c++ 一维数组、二维数组作为函数参数、返回值

    c/c++ 一维数组.二维数组作为函数参数.返回值 一.一维数组作为参数 传入数组 int [] 为了规范,常常需要将数组的size一同传入,这是因为C++/C遇到参数为数组时,不会去一个个拷贝数组内 ...

  7. shell 使用数组作为函数参数的方法

    使用shell开发一些小工具,当使用数组作为函数参数时,发现只能传递数组的第一个元素,数组后面的元素不能传递到函数内. #!/bin/bashfunction showArr(){arr=$1for ...

  8. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  9. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

最新文章

  1. pandas任取dataframe中的一个或者多个数据行(head、tail、loc、iloc),将抽取到的一个或者多个数据行复制N次形成新的dataframe
  2. 【解决线程安全问题:通过Lock锁对象】
  3. matlab 小波滤波器系数导出函数,小波基函数和滤波系数.ppt
  4. python 求连线相似度_Python分析《都挺好》中的人物关系,苏大强与蔡根花是真爱?...
  5. php 整数转换为32 位,PHP哈希函数返回一个整数(32位int)(PHP hashing function that returns an integer (32bit int))...
  6. canvas图像保存
  7. 【NOIP普及组】2016模拟考试(10.29)——排座椅
  8. WCF 非http寄宿IIS
  9. CentOS6.2下使用Nokia E72i成功发送短信
  10. Fiddler安装教程(图文版)
  11. vue动态class类型
  12. spring boot redis分布式锁
  13. ClickHouse安装与引擎
  14. 频登各大时装周运动品牌FILA在得物App首发和平精英联名系列
  15. 设x、y、t均为int型变量,则执行语句:t=3; x=y=2; t=x++||++y; 后,变量t和y的值分别为
  16. 批量修改pdf文件名称(一)
  17. 怎么查看自己的笔记本电脑系统型号以及其他配置(DXDIAG打开DirectX诊断配置)
  18. workman 日志_workerman
  19. 10月书讯丨10本新书为你充电
  20. HTML/CSS 新浪注册框

热门文章

  1. python计算存款本息和_假如你有1000万存款!躺着够花几年,用Python分分钟告诉你!...
  2. python发送邮件回执功能
  3. Ubuntu安装Redis6.2.6
  4. 如何在MFC中插入背景图片
  5. 补码器电路图(logisim实现)
  6. eclipse的使用小技能
  7. 一口塑料普通话!各大美妆品牌和Z世代的“团宠”
  8. 怎么把安装文件弄到服务器上面,如何上传安装包到服务器
  9. vue实现百度语音播报API调用
  10. Java线性代数库jblas的应用举例