【发布时间】:2017-11-23 23:39:36
【问题描述】:
我写了一个函数,应该“返回”指向数组最大值的指针
void findMax(int arr[], int n, int* pToMax)
{
if (n <= 0)
return;
pToMax = arr;
for (int i = 1; i < n; i++)
{
if (arr[i] > *pToMax) {
pToMax = arr + i;
}
}
}
我主要用
来称呼它int nums[4] = { 5, 3, 15, 6 };
int* ptr = nums;
findMax(nums, 4, ptr);
但是,指针值似乎没有从函数中改变,这让我相信第三个参数可能必须是指向指针的指针。但我认为无论函数中的指针做什么都会改变指针(就像引用一样)
编辑:重做函数
void findMax(int arr[], int n, int** pToMax)
{
if (n <= 0)
return;
pToMax = &arr;
for (int i = 1; i < n; i++)
{
if (arr[i] > *(*pToMax)) {
*pToMax = arr + i;
}
}
}
现在我这样称呼它
int nums[4] = { 5, 3, 15, 6 };
int* ptr = nums;
findMax(nums, 4, &ptr);
【问题讨论】:
-
当您将其更改为指向指针的指针或指针引用时,您观察到了什么?
-
基本内容:对
pToMax所做的任何更改都不会在函数外部可见。对*pToMax的任何更改都将是。 -
@Tas 好像没有效果
-
您通过值而不是通过引用传递指针,因此 pToMax 是 ptr 的副本,仅存在于您的函数中。将参数更改为 int* &pToMax ,它应该可以工作。如果这个问题仍然存在,我稍后会详细说明。
-
int* ptr = std::max_element(nums, nums + 4);-- 不需要函数。