C语言中的返回语句:函数结果的门户

Xin chào các bạn, những ngôi sao lập trình tương lai! Hôm nay, chúng ta sẽ cùng tìm hiểu một trong những khái niệm quan trọng nhất trong lập trình C: câu lệnh return. Hãy chuẩn bị sẵn sàng, vì đến cuối bài hướng dẫn này, bạn sẽ có thể trả về giá trị như một chuyên gia!

C - Return Statement

Câu lệnh Return là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu qua về câu lệnh return. Hãy tưởng tượng bạn là một đầu bếp trong một nhà hàng bận rộn. Bạn được giao một công thức (đó là hàm của bạn) để làm một chiếc bánh ngon. Khi bạn đã làm xong bánh, bạn cần gửi nó trở lại cho người phục vụ (đó là câu lệnh return). Câu lệnh return giống như nói, "Đây là kết quả của tất cả công sức của tôi!"

Trong lập trình C, câu lệnh return làm hai điều:

  1. Nó chỉ định giá trị mà hàm nên trả về cho mã đã gọi nó.
  2. Nó ngay lập tức kết thúc việc thực thi hàm.

Cú pháp của câu lệnh Return

Cú pháp của câu lệnh return rất đơn giản:

return biểu_thức;

Tại đây, biểu_thức có thể là một hằng số, một biến hoặc một biểu thức phức tạp hơn. Hãy xem một số ví dụ:

return 5;  // Trả về số nguyên 5
return x;  // Trả về giá trị của biến x
return x + y;  // Trả về tổng của x và y

Bây giờ, hãy xem một hàm hoàn chỉnh sử dụng câu lệnh return:

int add(int a, int b) {
int sum = a + b;
return sum;
}

Trong hàm này, chúng ta đang cộng hai số và trả về kết quả. Khi chúng ta gọi hàm này, nó sẽ đưa lại tổng của hai số chúng ta đã cung cấp.

Câu lệnh Return Void

Đôi khi, chúng ta có các hàm không cần trả về giá trị. Những hàm này được khai báo với kiểu trả về void. Ví dụ:

void greet() {
printf("Hello, World!");
return;  // Điều này là tùy chọn
}

Trong các hàm void, câu lệnh return là tùy chọn. Nếu sử dụng, nó chỉ thoát khỏi hàm mà không trả về giá trị nào.

Sai khớp Kiểu Trả về trong Câu lệnh Return

Một lỗi phổ biến mà người mới bắt đầu thường mắc phải là trả về một giá trị không khớp với kiểu trả về đã khai báo của hàm. Hãy xem một ví dụ:

int get_age() {
return "Twenty";  // Lỗi! Trả về một chuỗi từ hàm nguyên
}

Điều này sẽ gây ra lỗi编译器 vì chúng ta đang cố gắng trả về một chuỗi từ một hàm được khai báo là nguyên.

Trả về Nhiều Giá trị với Câu lệnh Return

Hiện tại, bạn có thể đang tự hỏi, "Tôi có thể trả về nhiều giá trị từ một hàm không?" Well, không trực tiếp. Các hàm C chỉ có thể trả về một giá trị. Tuy nhiên, chúng ta có thể sử dụng con trỏ hoặc cấu trúc để trả về nhiều giá trị một cách gián tiếp. Dưới đây là một ví dụ sử dụng con trỏ:

void get_dimensions(int* length, int* width) {
*length = 10;
*width = 5;
}

int main() {
int l, w;
get_dimensions(&l, &w);
printf("Length: %d, Width: %d\n", l, w);
return 0;
}

Trong ví dụ này, chúng ta đang thay đổi các giá trị tại các địa chỉ bộ nhớ được chỉ bởi lengthwidth, hiệu quả là trả về hai giá trị.

Trả về Mảng từ Hàm

Trả về một mảng từ một hàm trong C có thể là một điều khó khăn vì C không cho phép bạn trực tiếp trả về một mảng. Tuy nhiên, bạn có thể trả về một con trỏ đến mảng. Dưới đây là một ví dụ:

int* get_fibonacci(int n) {
static int fib[10];  // Tĩnh để nó không bị hủy khi hàm kết thúc
fib[0] = 0;
fib[1] = 1;
for(int i = 2; i < n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}
return fib;
}

int main() {
int* fibonacci = get_fibonacci(10);
for(int i = 0; i < 10; i++) {
printf("%d ", fibonacci[i]);
}
return 0;
}

Hàm này trả về một con trỏ đến một mảng chứa 10 số Fibonacci đầu tiên.

Sử dụng exit() Thay vì Câu lệnh Return

Đôi khi, bạn có thể muốn chấm dứt toàn bộ chương trình, không chỉ một hàm. Đó là khi hàm exit() được sử dụng. Nó giống như nhấn nút dừng khẩn cấp trong một nhà máy. Dưới đây là cách nó hoạt động:

#include <stdlib.h>

int main() {
int x = 5;
if(x < 10) {
printf("x is less than 10\n");
exit(0);  // Chương trình kết thúc ở đây nếu x < 10
}
printf("This won't be printed if x < 10\n");
return 0;
}

Hàm exit() ngay lập tức chấm dứt chương trình. Số trong dấu ngoặc tròn (như exit(0)) là mã trạng thái trả về cho hệ điều hành.

Tóm tắt các Phương pháp Sử dụng Câu lệnh Return

Dưới đây là bảng tóm tắt các cách khác nhau chúng ta đã thảo luận để sử dụng câu lệnh return:

Phương pháp Mô tả Ví dụ
Trả về Cơ bản Trả về một giá trị duy nhất return 5;
Trả về Void Sử dụng trong hàm không có giá trị trả về return;
Trả về với Biểu thức Trả về kết quả của một biểu thức return x + y;
Trả về Nhiều Giá trị (qua con trỏ) Indirectly returns multiple values *length = 10; *width = 5;
Trả về Mảng (qua con trỏ) Trả về một con trỏ đến một mảng return array_name;
exit() Chấm dứt toàn bộ chương trình exit(0);

Và thế là bạn đã có nó! Bây giờ bạn đã là một maestro của câu lệnh return. Nhớ rằng, thực hành làm nên完美, vì vậy đừng ngại thử nghiệm các khái niệm này trong mã của riêng bạn. Chúc các bạn lập trình vui vẻ!

Credits: Image by storyset