运用void FindMaxMin函数找最大值及最小值以及它们的下标这个代码哪错了?

#include<stdio.h>
void FindMaxMin(int num[],int n,int *pMax,int *pMaxPos,int *pMin,int *pMinPos);
int main()
{
int arr[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&arr[i]);
}
int *pMax,*pMin,*pMaxPos,*pMinPos;
FindMaxMin(arr,5,pMax,pMin,pMaxPos,pMinPos);
printf("最大值是%d,它的下标是%d",*pMax,*pMaxPos);
printf("最小值是%d,它的下标是%d",*pMin,*pMinPos);
return 0;
}
void FindMaxMin(int num[],int n,int *pMax,int *pMaxPos,int *pMin,int *pMinPos)
{
int i,j,k,max,min;
for(i=0;i<n-1;i++)
{
if(num[i]>num[i+1])
max=i;
else
max=i+1;
}
for(i=0;i<n-1;i++)
{
if(num[i]>num[i+1])
min=i+1;
else
min=i;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(num[j]>num[j+1])
{
k=num[j];
num[j]=num[j+1];
num[j+1]=k;
}
}
}
*pMax=num[n-1];
*pMin=num[0];
*pMaxPos=max;
*pMinPos=min;

}

看到一个邀请我回答的问题,我把代码也写了一下~~

一、源码如下

#include<stdio.h>
void FindMaxMin(int num[],int n,int *pMax,int *pMaxPos,int *pMin,int *pMinPos);

int main()
{
    int arr[5],i;
    for(i=0;i<5;i++)
    {
     scanf("%d",&arr[i]);
    }
    int pMax,pMin,pMaxPos,pMinPos;
    FindMaxMin(arr,5,&pMax,&pMin,&pMaxPos,&pMinPos);
    printf("最大值是%d,它的下标是%d",pMax,pMaxPos);
    printf("最小值是%d,它的下标是%d",pMin,pMinPos);
    return 0;
}
void FindMaxMin(int num[],int n,int *pMax,int *pMaxPos,int *pMin,int *pMinPos)
{
    int i;
    int maxPos = 0, minPos = 0;
    for(i = 0; i < n; ++i) {
        if(num[i] > num[maxPos] ) maxPos = i;
        if(num[i] < num[minPos] ) minPos = i;
    } 
    
    *pMax = num[maxPos];
    *pMaxPos = maxPos;
    
    *pMin = num[minPos];
    *pMinPos = minPos;
}

二、解释

首先你对指针的理解有一些偏差,这里函数传参,应该用 & 传地址;
其次就是求最大值和最小值的代码可以很简单,可以看下我的实现;

你的指针根本没指向什么,是野指针!非常危险!