2012-02-04 15 views
9
void swap(int &first, int &second){ 
    int temp = first; 
    first = second; 
    second = temp; 
} 

//////Fuera parámetros en C

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

En el ejemplo anterior, las quejas C compilador que "intercambio void (int & primero, int & segundos)" tiene un error de sintaxis . como perder "&" antes "(/ {"

no entiendo por qué no es compatible con esta característica C

+1

O puede utilizar el canje xor :) '* = *^primer segundo, segundo *^* = en primer lugar, * first^= * second; ' –

+0

¿Te importa usar #define? si es así, intercambie (a, b) b^= a; a^= b; b^= a; – QuentinUK

+10

Los permutas de XOR y tales pertenecen al IOCCC, no en el código real o como un consejo para principiantes. –

Respuesta

12

C no admite el paso por referencia. Por lo que tendrá que utilizar punteros para hacer lo que está tratando de lograr:

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


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

hago NO recomiendan esto: Pero voy a añadir que esté completa.

Puede usar una macro si sus parámetros no tienen efectos secundarios.

#define swap(a,b){ \ 
    int _temp = (a); \ 
    (a) = _b;  \ 
    (b) = _temp;  \ 
} 
21

C no soporta el paso por referencia;?? t hat es una característica de C++. En su lugar, tendrá que pasar punteros.

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

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

de intercambio de número entero se puede utilizar este método sin una variable local:

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

Debe ser 'void swap (int * a, int * b)' para evitar la 'advertencia: el control llega al final de la función non-void' (nunca duele comprobar' if (* a! = * b) 'antes de intercambiar ...) –