TopDev

Hàm (function) trong C/C++

minhu 📖 4 phút đọc

Hàm (function) trong C/C++ là một đoạn mã độc lập được thiết kế để thực hiện một nhiệm vụ cụ thể. Hàm giúp chia nhỏ chương trình thành các phần nhỏ, dễ quản lý và tái sử dụng.

1. Định nghĩa và khai báo hàm#

Định nghĩa hàm#

Định nghĩa hàm bao gồm tiêu đề hàm và phần thân hàm. Tiêu đề hàm xác định tên hàm, kiểu trả về và danh sách tham số, trong khi phần thân hàm chứa các câu lệnh thực thi.

Cú pháp: kiểu_trả_về tên_hàm(danh_sách_tham_số) { // Các câu lệnh thực hiện trong hàm }

Ví dụ: ` #include <stdio.h>

// Hàm tính tổng của hai số nguyên int tong(int a, int b) { int result = a + b; return result; }

int main() { int x = 5, y = 7; int sum = tong(x, y); printf("Tong cua %d va %d la: %d\n", x, y, sum); return 0; } `

Trong ví dụ này, hàm tong nhận hai tham số kiểu int và trả về tổng của chúng.

Khai báo hàm#

Khai báo hàm (function declaration hay prototype) là việc khai báo tên hàm, kiểu trả về và danh sách tham số mà không cần phần thân hàm. Khai báo hàm thường được đặt ở đầu tệp hoặc trong tệp tiêu đề (header file).

Cú pháp: kiểu_trả_về tên_hàm(danh_sách_tham_số);

Ví dụ: ` int tong(int a, int b);

int main() { int x = 5, y = 7; int sum = tong(x, y); printf("Tong cua %d va %d la: %d\n", x, y, sum); return 0; }

int tong(int a, int b) { return a + b; } `

2. Các kiểu hàm#

Hàm trả về giá trị#

Hàm trả về giá trị sử dụng từ khóa return để trả về một giá trị cho hàm gọi.

Ví dụ: int nhan(int a, int b) { return a * b; }

Hàm không trả về giá trị (void)#

Hàm không trả về giá trị sử dụng kiểu trả về void và không có câu lệnh return hoặc chỉ sử dụng return để thoát hàm.

Ví dụ: void inChao() { printf("Xin chao!\n"); }

3. Tham số hàm#

Tham trị (Pass by value)#

Tham trị truyền giá trị của tham số vào hàm, và thay đổi giá trị bên trong hàm không ảnh hưởng đến giá trị bên ngoài hàm.

Ví dụ: ` void thayDoiGiaTri(int a) { a = 10; }

int main() { int x = 5; thayDoiGiaTri(x); printf("Gia tri cua x: %d\n", x); // x vẫn là 5 return 0; } `

Tham chiếu (Pass by reference) - chỉ có trong C++#

Tham chiếu truyền địa chỉ của tham số vào hàm, cho phép thay đổi giá trị của tham số bên ngoài hàm.

Ví dụ: ` #include using namespace std;

void thayDoiGiaTri(int &a) { a = 10; }

int main() { int x = 5; thayDoiGiaTri(x); cout << "Gia tri cua x: " << x << endl; // x sẽ là 10 return 0; } `

Con trỏ (Pointers) - áp dụng cho cả C và C++#

Tham chiếu bằng cách sử dụng con trỏ để truyền địa chỉ của biến vào hàm.

Ví dụ: ` #include <stdio.h>

void thayDoiGiaTri(int *a) { *a = 10; }

int main() { int x = 5; thayDoiGiaTri(&x); printf("Gia tri cua x: %d\n", x); // x sẽ là 10 return 0; } `

4. Hàm đệ quy#

Hàm đệ quy là hàm tự gọi chính nó. Hàm đệ quy cần có một điều kiện dừng để tránh tạo vòng lặp vô hạn.

Ví dụ: ` #include <stdio.h>

// Hàm tính giai thừa của một số nguyên dương int giaiThua(int n) { if (n == 0) { return 1; } else { return n * giaiThua(n - 1); } }

int main() { int n = 5; printf("Giai thua cua %d la: %d\n", n, giaiThua(n)); return 0; } `

Trong ví dụ này, hàm giaiThua tự gọi chính nó để tính giai thừa của một số nguyên dương.

5. Các hàm thư viện#

C/C++ cung cấp nhiều hàm thư viện sẵn có để thực hiện các tác vụ thông thường như nhập/xuất, xử lý chuỗi, toán học, quản lý bộ nhớ, v.v. Một số thư viện phổ biến:

  • stdio.h: Các hàm nhập/xuất cơ bản.

  • stdlib.h: Quản lý bộ nhớ, chuyển đổi kiểu dữ liệu, các hàm ngẫu nhiên.

  • string.h: Xử lý chuỗi.

  • math.h: Các hàm toán học.

Ví dụ sử dụng hàm thư viện: ` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>

int main() { // Hàm nhập/xuất từ thư viện stdio.h printf("Nhap mot so: "); int num; scanf("%d", &num); printf("Ban da nhap: %d\n", num);

// Hàm toán học từ thư viện math.h
double squareRoot = sqrt(16.0);
printf("Can bac hai cua 16 la: %.2f\n", squareRoot);

// Hàm xử lý chuỗi từ thư viện string.h
char str1[20] = "Hello";
char str2[20] = "World";
strcat(str1, str2);
printf("Chuoi sau khi noi: %s\n", str1);

return 0;

} `

Các hàm trong C/C++ cung cấp một cách mạnh mẽ và linh hoạt để tổ chức mã nguồn, giúp mã dễ đọc, dễ bảo trì và tái sử dụng.

Bài liên quan trong #C/C++

✓ Đã sao chép link