这个程序哪里有问题,为什么没有调换?

出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。数据没对调,a[0]变成了0怎么回事,哪里出错了,要怎么改?

img

你这里根本没有直接对a[0]和a[1]进行操作。肯定与你题目说的结果不一样。

函数修改如下,供参考:

void fun(int* a, int n)
{
    int i, m, t, k;
    for (i = 0; i < n-1; i++)
    {
        m = i;
        for (k = i + 1; k < n; k++)
        {
            if (a[k] > a[m])
                m = k;
        }
        if (m != i)
        {
            t = a[i];
            a[i] = a[m];
            a[m] = t;
        }
    }
}

for判断时数组下标越界了