C++指针与数组作为函数参数其各自的特点有哪些?指针与数组作为函数参数其各自的特点有哪些?
不知道你这个问题是否已经解决, 如果还没有解决的话:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
注意:
n = height.length
2 <= n <= 3 * 104
0 <= height[i] <= 3 * 104
C++中指针和数组作为函数参数的特点:
指针作为函数参数:
优点:
1.指针作为函数参数,可以直接修改实参的值,有利于实现代码重用。
2.传递指针相比传递数组,可以减少空间复制的开销,提高程序的运行效率。
缺点:
1.传递指针相比传递数组,代码可读性差。
2.指针可能悬空,容易出现空指针和非法指针等问题。
在何种情况下应该选择指针作为函数参数:
1.如果函数需要修改实参的值,则应该使用指针。
2.如果函数需要传递一个复杂的结构体、类的对象,一般都是通过指针来访问这个对象的。
3.如果数组的大小不是固定的,并且需要操作数组的长度,那么使用指针可以更方便地实现。
数组作为函数参数:
优点:
1.数组作为函数参数,因为数组本身就是指针,与指针一样可以直接修改实参的值,有利于实现代码重用。
2.传递数组相比传递指针,代码可读性较好。
缺点:
1.传递数组相比传递指针,空间复制的开销较大,可能会影响程序的运行效率。
2.无法通过数组名得到数组长度,必须额外传递数组长度。
在何种情况下应该选择数组作为函数参数:
1.如果数组的大小是固定的,并且只需要对数组进行读取操作,那么使用数组作为函数参数比较方便。
2.如果数组的大小是固定的,需要对数组进行修改操作,那么使用指针作为函数参数比较方便。
附加内容:参考资料中的代码是关于在一个升序数组中查找给定目标值的下边界和上边界的问题,使用了二分查找法和双指针方法,可以作为对指针和数组作为函数参数的实际应用的参考。代码中的二分查找法是用递归实现的,需要注意二分查找法方法1和方法2的区别。
本质上是一样的,因为对于函数参数,数组会退化成指针。