数组作为函数参数的理解
目录
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.总结
数组作为函数参数时,其形参可以写为数组的形式,也可以写为指针的形式,两者形式不同,但效果相同。
数组作为函数参数的理解相关推荐
- 数组作为函数参数进行传递
今天编程序时发生了个这样的错误: 在头文件里 定义了一个数组: View Code 1 char s[]="1234567890"; 又定义了一个现显示组的函数: View Cod ...
- C语言中数组做函数参数的问题
数组做函数参数,会退化成为一个指针变量.因此在进行数组参数传递的同时,需要传递一个数组长度的参数变量. 数组长度可以通过sizeof(arr)/siezof(arr[0])来得到.关于这个sizeof ...
- 6.指针数组做函数参数
一维数组名也是一个地址,即指针,只不过数组名是一个常量指针,常量指针即不能修改该指针的值!所以看字符数组的赋值与字符指针的赋值就明白了! void main() {int a[5] = { 0,1,2 ...
- 数组名作为函数的参数 与数组作为函数参数的区别
数组元素作为函数的实参时,像形参变量传递的是数组元素的值,而用数组名作为函数的实参时,向形参(数组名或指针变量)传递的是数组首元素地址.参考如下代码可以更好的理解. 1数组名作为函数的参数 //1有一 ...
- C语言 二维数组作为函数参数的4种方式
前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...
- c/c++ 一维数组、二维数组作为函数参数、返回值
c/c++ 一维数组.二维数组作为函数参数.返回值 一.一维数组作为参数 传入数组 int [] 为了规范,常常需要将数组的size一同传入,这是因为C++/C遇到参数为数组时,不会去一个个拷贝数组内 ...
- shell 使用数组作为函数参数的方法
使用shell开发一些小工具,当使用数组作为函数参数时,发现只能传递数组的第一个元素,数组后面的元素不能传递到函数内. #!/bin/bashfunction showArr(){arr=$1for ...
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
最新文章
- pandas任取dataframe中的一个或者多个数据行(head、tail、loc、iloc),将抽取到的一个或者多个数据行复制N次形成新的dataframe
- 【解决线程安全问题:通过Lock锁对象】
- matlab 小波滤波器系数导出函数,小波基函数和滤波系数.ppt
- python 求连线相似度_Python分析《都挺好》中的人物关系,苏大强与蔡根花是真爱?...
- php 整数转换为32 位,PHP哈希函数返回一个整数(32位int)(PHP hashing function that returns an integer (32bit int))...
- canvas图像保存
- 【NOIP普及组】2016模拟考试(10.29)——排座椅
- WCF 非http寄宿IIS
- CentOS6.2下使用Nokia E72i成功发送短信
- Fiddler安装教程(图文版)
- vue动态class类型
- spring boot redis分布式锁
- ClickHouse安装与引擎
- 频登各大时装周运动品牌FILA在得物App首发和平精英联名系列
- 设x、y、t均为int型变量,则执行语句:t=3; x=y=2; t=x++||++y; 后,变量t和y的值分别为
- 批量修改pdf文件名称(一)
- 怎么查看自己的笔记本电脑系统型号以及其他配置(DXDIAG打开DirectX诊断配置)
- workman 日志_workerman
- 10月书讯丨10本新书为你充电
- HTML/CSS 新浪注册框