我写了一个应该"返回"指向数组最大值的指针
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);
答案 0 :(得分:2)
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;
}
答案 1 :(得分:0)
更好的方法是执行int num[5]={1, 5, 6, 2, -1}
,因为您只使用了一个整数数组。
假装您拥有数组int theMax = *max_element(num, num + 5);
;
您可以使用内置的C ++函数max_element创建一个单行命令,而不是您的函数。
要查找最大元素,您只需说#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;
}
即可完成。
以下是一个示例程序:
public async Task OpenFileWithAsync(string path)
{
var file = await StorageFile.GetFileFromPathAsync(path);
if (file != null)
{
var options = new LauncherOptions();
options.DisplayApplicationPicker = true;
var success = await Launcher.LaunchFileAsync(file, options);
if (success)
{
//File Launched
}
else
{
//File Launch Failed
}
}
}
答案 2 :(得分:0)
首先,我在下面提出了解决问题的方法:
#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
完全超出了此问题的范围。
检查上面的解决方案。希望它可以帮到你。
注意:此问题根本不需要使用指针。但如果你的研究专注于理解指针,那么这个解决方案对你有用。