Выходные параметры в С - PullRequest
       8

Выходные параметры в С

10 голосов
/ 05 февраля 2012
void swap(int &first, int &second){
    int temp = first;
    first = second;
    second = temp;
}

//////

int a=3,b=2;
swap(a,b);

В приведенном выше примере компилятор C жалуется, что в синтаксической ошибке "void swap (int & first, int & second)" отсутствует пропущенное "&" before "(/ {".

Я не понимаю, почему? Разве C не поддерживает эту функцию?

Ответы [ 3 ]

21 голосов
/ 05 февраля 2012

C не поддерживает передачу по ссылке;это особенность C ++.Вместо этого вам придется передавать указатели.

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}

int a=3,b=2;
swap(&a,&b);
16 голосов
/ 05 февраля 2012

C не поддерживает передачу по ссылке. Поэтому вам нужно будет использовать указатели, чтобы делать то, что вы пытаетесь достичь:

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}


int a=3,b=2;
swap(&a,&b);

Я НЕ рекомендую это: Но я добавлю это для полноты.

Вы можете использовать макрос, если ваши параметры не имеют побочных эффектов.

#define swap(a,b){   \
    int _temp = (a); \
    (a) = _b;        \
    (b) = _temp;     \
}
0 голосов
/ 15 мая 2014

для целочисленного обмена вы можете использовать этот метод без локальной переменной:

int swap(int* a, int* b)
{
    *a -= *b;  
    *b += *a;  
    *a = *b - *a; 
}
...