使用引用在函数中传递参数有什么问题

时间:2014-07-29 11:24:17

标签: c++ argument-passing insertion-sort

我试图实现插入排序。当我在while循环中编写swap方法时,该算法工作正常。但是当我尝试调用swap()函数时,它给出了错误的答案。 具体来说,当我传递参数' j'时,它会使答案出错。请你告诉我我犯了哪个错误。(关于ideone![http://ideone.com/MoqHgn]

#include <iostream>
using namespace std;

void swap(int *x, int *y, int *j) { 
    int temp = *x;
    *x = *y;
    *y = temp;
    *j--;
}

int main() {
    int N;
    scanf("%d", &N);
    int a[N];
    for(int i = 0; i < N; i++) {
        scanf("%d", &a[i]);
    }
    for(int i = 1; i < N; i++) {
        int j = i;
        while(j > 0 && a[j-1] > a[j]) {
            swap(&a[j-1], &a[j], &j);
            //int temp = a[j];
            //a[j] = a[j-1];
            //a[j-1] = temp;
            //j--;  
        }
    }

    for(int i = 0; i<N; i++) {
        cout << a[i] << " ";
    }

    return 0;
}

1 个答案:

答案 0 :(得分:5)

*j--*(j--)相同,但您需要(*j)--

由于您使用C ++进行编码,为什么不通过引用而不是使用指针进行编码?