关于指针在函数中变化的问题

2025-04-09 12:00:16
推荐回答(1个)
回答1:

//我自己写了一个, 差不多
//大概问题就是ptr = a
//ptr指向数组了, 那么FindMax函数内部的ptr = i就会改变数组a的值
#include 
int FindMax(int num[], int n, int *pMaxPos);
int FindMin(int num[], int n, int *pMinPos);
int main(void)
{
    int a[] = {-1, 2, 3, 45, 92, 8, 9, 12, 7, 8};
    int n, max, min, umax, umin, *pMaxPos, *pMinPos;
    //这里如果单纯只是在函数内部使用*pMaxPos = i会导致改变数组的值
    //(因为之前使用pMaxPos = a), 而不是记录数组下标
    umax = umin = 0;
    //必须初始化0, 否则最小值在头部, 会出现一个随机数(临时变量)
    pMaxPos = &umax;
    pMinPos = &umin;
    //END
    n = sizeof(a) / sizeof(a[0]);
    max = FindMax(a, n, pMaxPos);
    min = FindMin(a, n, pMinPos);
    printf("max = %d, min = %d\n", max, min);
    printf("%d, %d", umax, umin);
}
int FindMax(int num[], int n, int *pMaxPos)
{
    int i, t;
    t = num[0];
    for(i = 0; i < n; i++)
    {
        if(t < num[i])
        {
            t = num[i];
            *pMaxPos = i;
        }
    }
    printf("pMaxPos = %d\n", *pMaxPos);
    return t;
}
int FindMin(int num[], int n, int *pMinPos)
{
    int i, t;
    t = num[0];
    for(i = 0; i < n; i++)
    {
        if(t > num[i])
        {
            t = num[i];
            *pMinPos = i;
        }
    }
    printf("pMinPos = %d\n", *pMinPos);
    return t;
}