[英]Finding pointer to maximum value of array
我编写了一个函数,该函数应“返回”指向数组最大值的指针
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);
您不需要if (n <= 0)
来处理循环条件
您不需要pToMax = arr;
,您在调用函数之前就已经这样做了
要通过引用传递指针以便可以对其进行修改,请使用int *&pToMax
void findMax(int arr[], int n, int *&pToMax)
{
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);
std::cout << *ptr; //15
Killzone Kid使用引用传递的指针发布了可行的解决方案。 您的第二次尝试实际上也在正确的轨道上。 重新分配pToMax
时,您只是犯了一个小错误,使它不再指向ptr
而是指向arr
。 相反,您应该取消引用pToMax
以将ptr
指向arr
。 这是一个经过测试的有效解决方案:
#include <iostream>
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 main( void )
{
int nums[4] = { 5, 3, 15, 6 };
int* ptr = NULL;
findMax(nums, 4, &ptr);
std::cout << *ptr << std::endl;
}
更好的方法是只使用*max_element(nums, nums + 4)
因为您只使用整数数组。
假设您有数组int num[5]={1, 5, 6, 2, -1}
1,5,6,2 int num[5]={1, 5, 6, 2, -1}
; 除了使用函数外,还可以使用内置的C ++函数max_element使用单行命令。 要找到max元素,您可以说int theMax = *max_element(num, num + 5);
这样就可以了。
这是一个示例程序:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num[5] = {1, 5, 6, 2, -1};
int theMax = *max_element(num, num + 5);
cout << theMax << endl;
}
首先,我在下面介绍您的问题的解决方案:
#include <iostream>
using namespace std;
int * findMax(int arr[], int n, int* pToMax)
{
if (n <= 0)
return pToMax;
for (int i = 1; i < n; i++)
{
if (arr[i] > *pToMax) {
pToMax = arr + i;
}
}
return pToMax;
}
int main() {
int nums[4] = { 5, 3, 15, 6 };
int* ptr = nums;
cout << "Big is " << *findMax(nums, 4, ptr) << "\n";
return 0;
}
请注意:创建带有分配给数组的指针时,默认情况下它采用初始位置,因此分配pToMax = &arr;
函数内部没有必要。
要理解的另一件事是,您没有使用2D数组,因此int** pToMax
完全超出了此问题的范围。
检查上面的解决方案。 希望对您有帮助。
注意:此问题根本不需要使用指针。 但是,如果您的研究重点是理解指针,那么此解决方案将为您工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.