[By JHF 學長]
這是某個風和日麗(?)的下午, 老闆跑進來說: 剛好, 每個人拿一張紙
寫下C, C++, Java的swap....結果自然慘不忍睹....
1.C 的版本 (Pass by Address)
void swap(int* a, int* b)
{
int c;
c = *a; // 這個時候 a是一個address, 但是*a則是一個int
*a = *b; // 所以把a, b的位址傳進來, 修改位址上的值,
*b = c; // 自然函式結束後, a b的值也交換了
}
int main(void)
{
int d = 3, e = 5;
printf("%d <-> %d", d, e);
swap(&d, &e); // 記得要傳入的是位址....
printf("%d <-> %d", d, e);
return 0;
}
Output:
3 <-> 5
5 <-> 3
2.C++ 的版本 (Pass by Reference)
void swap(int &a, int &b) // 老闆說: 這是C++ 不使用指標的產物
{ // 也就是'參考'
int c;
c = a; // 有沒有感覺很相似? 只是&a是位址 (on C的參考書)
a = b; // 或是參考 (on C++的參考書), 而a則是int
b = c;
}
int main(void)
{
int d = 3, e = 5;
cout << d << "<->" << e << endl;
swap(d, e); // 這就是傳參考的好處, 使用函式的人
// 不用考慮指標不指標的問題....
cout << d << "<->" << e << endl;
return 0;
}
Output:
3 <-> 5
5 <-> 3
這樣看起來感覺好用多了, 我們可以試著把cout改成printf,
然後用C 語言來編譯....你會得到parsing error的回應....
是的, 在C 語言中, 是不允許函式用void swap(int &a, int &b)
的方式宣告....所以雖然意義上是相似的....
反之, 如果拿C的版本去C++中編譯的結果呢? 放心, OK沒問題啦
--
以上的code都是經過實際測試的....保證正確
--
至於Java, 唔, 我本身對Java就不熟了, 這個部分就留個Java高手來解
這是某個風和日麗(?)的下午, 老闆跑進來說: 剛好, 每個人拿一張紙
寫下C, C++, Java的swap....結果自然慘不忍睹....
1.C 的版本 (Pass by Address)
void swap(int* a, int* b)
{
int c;
c = *a; // 這個時候 a是一個address, 但是*a則是一個int
*a = *b; // 所以把a, b的位址傳進來, 修改位址上的值,
*b = c; // 自然函式結束後, a b的值也交換了
}
int main(void)
{
int d = 3, e = 5;
printf("%d <-> %d", d, e);
swap(&d, &e); // 記得要傳入的是位址....
printf("%d <-> %d", d, e);
return 0;
}
Output:
3 <-> 5
5 <-> 3
2.C++ 的版本 (Pass by Reference)
void swap(int &a, int &b) // 老闆說: 這是C++ 不使用指標的產物
{ // 也就是'參考'
int c;
c = a; // 有沒有感覺很相似? 只是&a是位址 (on C的參考書)
a = b; // 或是參考 (on C++的參考書), 而a則是int
b = c;
}
int main(void)
{
int d = 3, e = 5;
cout << d << "<->" << e << endl;
swap(d, e); // 這就是傳參考的好處, 使用函式的人
// 不用考慮指標不指標的問題....
cout << d << "<->" << e << endl;
return 0;
}
Output:
3 <-> 5
5 <-> 3
這樣看起來感覺好用多了, 我們可以試著把cout改成printf,
然後用C 語言來編譯....你會得到parsing error的回應....
是的, 在C 語言中, 是不允許函式用void swap(int &a, int &b)
的方式宣告....所以雖然意義上是相似的....
反之, 如果拿C的版本去C++中編譯的結果呢? 放心, OK沒問題啦
--
以上的code都是經過實際測試的....保證正確
--
至於Java, 唔, 我本身對Java就不熟了, 這個部分就留個Java高手來解
文章標籤
全站熱搜

謝謝你的測試,這對我有幫助到
Java好像只能用wrapper class包完再swap