30/09/2018, 16:13

[Wiki] Hàm trả về và thoát return trong C/C++

  • Cấu trúc :
return <object> ;object có thể là một biến, một con số, một class, struct, null.. hoặc không gì cả.
  • Định nghĩa : Là 1 hàm hệ thống.Dùng để ngắt 1 chuỗi lệnh nếu để bên trong hoặc đánh dấu điểm cuối của 1 hàm(Kết thúc).
  • ví dụ : viết chương trình tính tổng của 2 số bất kỳ :
#include <iostream>// khai bao thu vien chuan
using namespace std;
int hamTinhTong2So(int a, int b)
{
	return a + b;// tra ve ket qua (a + b)
}
int main(int argc, char ** argv)
{
	int x, y;
	cout << "Nhap 2 so x, y de tinh tong!!" << endl;
	cin >> x >> y; // nhap vao 2 so x,y
	cout <<"Tong cua 2 so x + y = "<< hamTinhTong2So(x, y)<<endl;
	system("pause");// dung chuong trinh o dong nay
	return 0;// ket thuc ham main
}
  • Lưu ý : Hàm return có thể trả về kết quả kiểu con trỏ, giá trị số, biểu thức, giá trị boolean đúng sai, kết quả.
Phạm Hoàng Tuấn viết 18:24 ngày 30/09/2018

nếu a nhớ k lầm thì return có thể trả về bất cứ thứ gì (struct, class…) hoặc không trả về gì cả, đơn giản chỉ là để kết thúc hàm.

viết 18:23 ngày 30/09/2018

Lệnh return trong hàm đệ quy nó mang nghĩa quay lại những trạng thái được lưu trong stack trước đó.
Ví dụ:

#include <iostream>
using namespace std;

void recursion(int i)	{
	
	cout << "Luu trang thai hien tai: i = " << i << endl;
	
	if(i == 10)		{
		
		cout << "Come back: " << endl;
		return;
	}
	
	recursion(i+1);
	
	cout << i << " "; //Xử lý những trạng thái được lưu
}

int main() {
	
	recursion(1);
	
	return 0;
}
Nguyễn Minh Dũng viết 18:19 ngày 30/09/2018

nếu a nhớ k lầm thì return có thể trả về bất cứ thứ gì (struct, class…) hoặc không trả về gì cả, đơn giản chỉ là để kết thúc hàm.

Lệnh return trong hàm đệ quy nó mang nghĩa quay lại những trạng thái được lưu trong stack trước đó.

Cả 2 update lên Wiki đi

Phung Van Duc viết 18:16 ngày 30/09/2018

“Lệnh return trong hàm đệ quy nó mang nghĩa quay lại những trạng thái được lưu trong stack trước đó.”
bác cho em hỏi thêm là tại sao nó(hàm đệ quy) lại phải “quay lại những trạng thái được lưu trong stack trước” mà ko thoát luôn tại thời điểm return nhỉ?. cảm ơn bác!

rogp10 viết 18:14 ngày 30/09/2018

return chỉ có nghĩa là trả “quyền điều khiển” (hay con trỏ chương trình) lại cho hàm đã gọi nó mà thôi, chứ không phải “thoát” gì hết.

Khi rộng giảng thì để hiện thực khái niệm hàm, cần phải làm ba công việc:

  • Con trỏ chương trình (gọi là PC) trỏ vào câu lệnh tiếp theo được đẩy vào stack.
  • Lùi stack để chừa chỗ cho biến cục bộ.
  • Chọn nơi lưu tham số (cũng là biến cục bộ luôn) và giá trị trả về.
    Chuẩn bị rút khỏi hàm:
  • Nhả hết mem trên stack
  • Pop stack ra nhảy về (hai cái này chỉ 1 câu lệnh x86 ret abcd)
Phung Van Duc viết 18:22 ngày 30/09/2018

ok, tks bác @rogp10 e thấy trên youtube có clip này khá dễ hiểu, tiện share lên đây cho ae nào còn thắc mắc

Bài liên quan
0