我一输入负数,结果就出错

img

改成

*P1max = str[0];
*P1min = str[0];

你题目的解答代码如下:

#include <stdio.h>

void maxandmin(int a[],int *Plmax,int *Plmin,int n) {
    *Plmax = a[0];
    *Plmin = a[0];
    int *p = a;
    for (int i = 1; i < n; i++){
        if (*Plmax<*(p+i))
            *Plmax = *(p+i);
        if (*Plmin>*(p+i))
            *Plmin = *(p+i);
    }
}

void main() {
    int i,max,min;
    int a[10];
    for(i=0; i<10; i++)
    {
        scanf("%d",&a[i]);
    }
    maxandmin(a,&max,&min,10);
    printf("max=%d\n", max);
    printf("min=%d\n", min);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

数组是int类型的,在maxandmin函数中,for循环的 *(p+i) != '\0'没什么用啊
而且,你的参数n和m也没有用到。代码修改如下:

#include <stdio.h>
void maxanmin(int str[],int *pmax,int* pmin,int n)
{
    int i;
    int *p=str;
    *pmax = p[0];
    *pmin = p[0];
    for (i=1;i<n;i++)
    {
        if( *(p+i) > *pmax)
            *pmax = *(p+i);
        if( *(p+i) < *pmin)
            *pmin = *(p+i);
    }
}

int main()
{
    int a[100],i,max,min;
    for (i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    maxanmin(a,&max,&min,10);
    printf("max=%d\n",max);
    printf("min=%d\n",min);
    return 0;
}

p又不是char*,你怎么能用!='\0'判断int数组结束呢?
你要么把数组大小传递进去,要么函数内for循环结束条件改成i<10
然后最大最小值也不能默认为NULL,应该默认等于str[0]