试图打印数组的最大值..但打印垃圾

时间:2013-08-26 16:41:42

标签: c arrays pointers printf

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

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);
}

1 个答案:

答案 0 :(得分: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);