13
void swap(int &first, int &second){
    int temp = first;
    first = second;
    second = temp;
}
int a=3,b=2;
swap(a,b);

void swap(int &first, int &second)構文エラーがあるとコンパイラが訴えます。なんで?C は参照をサポートしていませんか?

4

3 に答える 3

21

C は参照渡しをサポートしていません。これは C++ の機能です。代わりにポインタを渡す必要があります。

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

int a=3,b=2;
swap(&a,&b);
于 2012-02-04T21:03:56.740 に答える
19

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;     \
}
于 2012-02-04T21:04:41.167 に答える
-3

整数スワップの場合、ローカル変数なしでこのメソッドを使用できます。

int swap(int* a, int* b)
{
    *a -= *b;  
    *b += *a;  
    *a = *b - *a; 
}
于 2014-05-14T21:29:21.113 に答える