26 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Thử ví dụ hàm swap #include <iostream.h> void swap(int& a, int& b) { int temp = a; a = b; b = temp; } void main() { int x = 5, y = 10; swap(x,y); cout << "Now x is " << x << ", y is " << y; } 27 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Khi nào sử dụng truyền tham chiếu? Chỉ trong C++ Khi cầnthay₫ổi"biến ₫ầuvào" (truynhậptrựctiếp vào ô nhớ, không qua bảnsao) Mộtthambiếnthamchiếucóthể₫óng vai trò là ₫ầu ra (chứakếtquả), hoặccóthể vừalà₫ầuvàovà₫ầu ra Khi kích cỡ kiểudữ liệulớn=> tránhsaochépdữ liệu vào ngănxếp, ví dụ: void copyData(const Student& sv1, Student& sv2) { sv2.birthday = sv1.birthday; } 28 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện 3.3.4 Kiểutrả về Kiểutrả về: gầnnhư tùy ý, chỉ không thể trả về trực tiếpmộtmảng Về nguyên tắc, có thể trả về kiểu: —Giátrị —Con trỏ —Thamchiếu Tuy nhiên, cầnrấtthậntrọng vớitrả về₫ịachỉ hoặc tham chiếu: — Không bao giờ trả về con trỏ hoặc tham chiếu vào biếncục bộ — Không bao giờ trả về con trỏ hoặc tham chiếu vào tham biếntruyềnqua giátrị Vớingườilập trình ít có kinh nghiệm: chỉ nên trả về kiểugiátrị 29 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Cơ chế trả về int SumInt(int a, int b) { int k = 0; for (int i=a; i <= b; ++i) k +=i; return k; } void main() { int x = 5, k = 0; k = SumInt(x,10); } SP x = 5 k =0 Ngănxếp SP a = 5 b = 10 k => 45 45 k = 45 30 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Trả về con trỏ Viếthàmtrả về₫ịachỉ củaphầntử lớnnhấttrongmộtmảng: int* FindMax(int* p, int n) { int *pMax = p; int *p2 = p + n; while (p < p2) { if (*p > *pMax) pMax = p; ++p; } return pMax; } void main() { int s[5] = { 1, 2, 3, 4, 5}; int *p = FindMax(s,5); } . 26 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Thử ví dụ hàm swap #include <iostream.h> void swap(int& a, int&. } 27 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Khi nào sử dụng truyền tham chiếu? Chỉ trong C++ Khi cầnthay₫ổi"biến ₫ầuvào" (truynhậptrựctiếp vào ô nhớ, không qua bảnsao) Mộtthambiếnthamchiếucóthể₫óng. = 5 b = 10 k => 45 45 k = 45 30 © 2004, HOÀNG MINH SƠN Chương 3: Hàm và thư viện Trả về con trỏ Viếthàmtrả về₫ịachỉ củaphầntử lớnnhấttrongmộtmảng: int* FindMax(int* p, int n) { int *pMax