为了账号安全,请及时绑定邮箱和手机立即绑定

函数传入的是指针,为什么不是数组?使用函数的时候为什么又是数组名,不是指针?

为什么函数getMaxOrMin在传参时,定义的是指针,而不是数组?

同时在使用该函数的时候为什么不是指针*arr1?

正在回答

3 回答

补充楼上所说。

问题一:函数传入的是指针,为什么不是数组?

传参,可以传数组,传指针可以使代码更简洁。(传指针只需要传4个字节,传数组需要传sizeof(arr)个字节,在本程序中,传数据的话需要传4*sizeof(int)=16个字节)

首先,main 函数中的 int arr1[4]; 定义了一个有4个int型元素的数组,这个数组名为arr1。也可以理解为 “arr1”指向了存储了4个int型元素的空间。此时,arr1是这段空间的首地址。

接着我们定义了一个getMaxOrMin(int* arr,...),这里的int *arr,表示它接受的参数是一个int 型的指针,也可以理解为,这个函数的第一个参数,需要传入 一个 指向一段int型元素空间的 地址。

在main函数,去调用getMaxOrMin(int *arr,...)

我们希望将arr1[4]的所有元素做个比较,得到最大值,因此我们需要传入一个,可以指向整个数据的首地址。

这个可传入的首地址不唯一,arr1 ,&arr1[0]都可以。

问题二:使用函数的时候为什么又是数组名,不是指针?

在函数中使用*arr1完全没有问题,这是*arr1代表的是arr1[0]的数据,如果要比较其它元素。则需要使用

*arr1,*(arr1+1),*(arr1+2),*(arr1+3),对应关系如下:

*arr1 = arr[0]

*(arr1+1) = arr[1]

*(arr1+2) = arr[2]

*(arr1+3)  = arr[3]

对比一下,是不是直接使用arr[0]、arr[1]、arr[2]、arr[3]更简洁一些呢?







3 回复 有任何疑惑可以回复我~

额, 有错别字,不能修改,

第一段原话是“传数据的话需要传4*sizeof(int)=16个字节”,应该是“传数组的话需要传4*sizeof(int)=16个字节”。

第五段原话是“可以指向整个数据的首地址”,应该是“可以指向整个数组的首地址”

1 回复 有任何疑惑可以回复我~
#1

qq_回锅肉_2

抱歉,传数组的话需要传4*sizeof(int)=16个字节。这句话是错误的。解释如下: 数组在当做参数传递时,会退化为指针。 因此不管你定义的getMaxorMin(int *arr,...),还是getMaxorMin(int arr[4],...)。在此函数中的arr的大小都是4,也就是一个指针的大小。回到原问题,两种写法都没有问题,只是推荐第一种写法,依然简洁。
2020-03-28 回复 有任何疑惑可以回复我~

这里的*arr1相当于是传arr1的首地址,定义函数要引用数组一个是*arr1,还有就是arr1[].两种。

0 回复 有任何疑惑可以回复我~
#1

weixin_慕沐4018656 提问者

不太懂你的意思耶
2020-03-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之起航篇
  • 参与学习       291033    人
  • 解答问题       760    个

C++亮点尽在其中,本课程是在C语言基础上的一个延伸,得以升华

进入课程

函数传入的是指针,为什么不是数组?使用函数的时候为什么又是数组名,不是指针?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信