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

//////Out tham số trong C

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

Trong ví dụ trên, các khiếu nại trình biên dịch C rằng "void swap (int & đầu tiên, int & giây)" có lỗi cú pháp . như mất tích "&" trước khi "(/ {"

tôi không hiểu tại sao không có hỗ trợ tính năng này C

+1

Hoặc bạn có thể sử dụng hoán đổi xor :) '* đầu tiên^= * thứ hai, thứ hai *^= * đầu tiên, * đầu tiên^= * giây; ' –

+0

Bạn có phiền không khi sử dụng #define? nếu có thì hoán đổi (a, b) b^= a; a^= b; b^= a; – QuentinUK

+10

Các giao dịch hoán đổi XOR và như vậy thuộc về IOCCC, không phải trong mã thực tế hoặc là lời khuyên cho người mới bắt đầu. –

Trả lời

12

C không hỗ trợ truyền qua tham chiếu. Vì vậy, bạn sẽ cần phải sử dụng con trỏ để làm những gì bạn đang cố gắng để đạt được:

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


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

tôi làm KHÔNG khuyên này: Nhưng tôi sẽ thêm nó cho đầy đủ.

Bạn có thể sử dụng macro nếu thông số của bạn không có tác dụng phụ.

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

C không hỗ trợ đi ngang qua tham khảo;? t mũ là một tính năng C++. Thay vào đó, bạn sẽ phải chuyển con trỏ.

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

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

for swap số nguyên bạn có thể sử dụng phương pháp này mà không có một biến địa phương:

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

Nên là 'void swap (int * a, int * b)' để tránh điều khiển 'warning: đạt đến kết thúc của hàm void (không bao giờ đau để kiểm tra' if (* a! = * b) 'trước khi hoán đổi ...) –

Các vấn đề liên quan