有同学说是min和max函数的形参只定义了数组首元素,但是我不知道改怎么改


#include
void change(int* p1, int* p2);
int max(int *a), min(int *a);
int a[10];
int main()
{
    int i,m,n;
    printf("请输入十个整数(整数之间用逗号隔开):");
    for (i = 0;i < 10;i++)
    {
        scanf_s("%d,", &a[i]);
    }
    int* p1 = a;
    n = min(p1);
    int* p2 = a;
    m = max(p2);
    int* t1 = &(a[m]), * t2 = &(a[n]);
    change(t1, &a[9]);
    change(t2, &a[0]);
    for (i = 0;i < 10;i++)
    {
        printf("%d", a[i]);
    }
    return 0;
}
int max(int* a)
{
    int max_num;
    int count_num;
    for (int i = 0;i < 10;i++)
    {
        if (i == 0)
        {
            max_num = a[0];
            count_num = 0;
        }
        else
        {
            if (max_num < a[i])
            {
                max_num = a[i];
                count_num = i;
            }
        }
    }
    return count_num;
}
int min(int* a)
{
    int min_num;
    int count_num;
    for (int i = 0;i < 10;i++)
    {
        if (i == 0)
        {
            min_num = a[0];
            count_num = 0;
        }
        else
        {
            if (min_num > a[i])
            {
                min_num = a[i];
                count_num = i;
            }
        }
    }
    return count_num;
}
void change(int* p1, int* p2)
{
    int p;
    p = *p1;
    *p1 = *p2;
    *p2 = p;
    return;
}

输入十个整数,输出结果要求把最大的数和最后一个数交换,最小的数和第一个数交换,其余整数顺序位置不变(要求用指针完成)

那个a可以代表数组的地址,不是所说的只定义了首元素,
你的错误在不应该是两个值互换,应该是把最小值放前面其余的数都要往后移,最大值放最后其余的往前移

修改如下,改动处见注释,供参考:

#include<stdio.h>
#define N 10     //修改
void change(int* p1, int* p2);
int max(int* a), min(int* a);
int main()
{
    int i, m, n, a[N];  //修改
    printf("请输入十个整数(整数之间用空格隔开):");
    for (i = 0; i < N; i++) //修改
    {
        scanf_s("%d", &a[i]); //数字间以空格隔开
        //scanf_s("%d,", &a[i]); 修改
    }
    int* p1 = a;
    n = min(p1);
    int* p2 = a;
    m = max(p2);
    if (m == 0)  m = n; //修改,如果最大值在第一位
    int* t1 = &(a[m]), * t2 = &(a[n]);
    change(t2, &a[0]); //修改,先移动最小值到第一位
    change(t1, &a[9]); //再移动最大的到最末位
    for (i = 0; i < N; i++) //修改
    {
        printf("%d ", a[i]);//修改
    }
    return 0;
}
int max(int* a)
{
    int max_num;
    int count_num;
    for (int i = 0; i < N; i++) //修改
    {
        if (i == 0)
        {
            max_num = a[0];
            count_num = 0;
        }
        else
        {
            if (max_num < a[i])
            {
                max_num = a[i];
                count_num = i;
            }
        }
    }
    return count_num;
}
int min(int* a)
{
    int min_num;
    int count_num;
    for (int i = 0; i < N; i++) //修改
    {
        if (i == 0)
        {
            min_num = a[0];
            count_num = 0;
        }
        else
        {
            if (min_num > a[i])
            {
                min_num = a[i];
                count_num = i;
            }
        }
    }
    return count_num;
}
void change(int* p1, int* p2)
{
    int p;
    p = *p1;
    *p1 = *p2;
    *p2 = p;
    return;
}