1

嘿,我正在尝试使用函数和指针打印数组中的最大元素。下面是我的代码,但它的打印垃圾值。请帮忙。

void findmax(int arr[],int,int*);
void findMax(int arr[], int n, int* pToMax)
{
    if (n <= 0) 
        return;      // no items, no maximum!

int max = arr[0];
pToMax = &arr[0];

for (int i = 1; i < n; i++)
{
    if (arr[i] > max)
    {
         max = arr[i];
         pToMax = (arr+i);
    }
}
}       
int main()
{
    int nums[4] = { 5, 3, 15, 6 };
    int *ptr;
    findMax(nums, 4, ptr);
    printf("The maximum is at address %u\n", ptr);
    printf("It's at index %d\n",ptr - nums);
    printf("Its value is %d\n", *ptr);
}
4

1 回答 1

4

随着和int *pToMax_findMax(int arr[], int n, int* pToMax)

调用,因为你只是作为一个值findMax(nums, 4, ptr);传递。ptr

函数退出后不会反映更新的值。

你需要使用**pToMax

保存地址。

void findMax(int arr[], int n, int** pToMax)
{
    if (n <= 0) 
        return;      // no items, no maximum!

int max = arr[0];
*pToMax = &arr[0]; //Store base address

for (int i = 1; i < n; i++)
{
    if (arr[i] > max)
    {
         max = arr[i];
         *pToMax = (arr+i); //Store max address
    }
}

}

调用使用

findMax(nums, 4, &ptr);

于 2013-08-26T16:54:10.820 回答