Function

Function

Hàm số trong C có tên, tham số và giá trị trả về. Sẽ thực thi đoạn code bên trong hàm khi chúng ta gọi nó. Ví dụ hàm addition trả về tổng của hai tham số của hàm.

1
2
3
4
5
6
7
int addition (int a, int b) {
  return a + b;
}
int main() {
  int sum = addition(1,2);
  printf("%d", sum);
}

Hàm không trả về tham số thì có kiểu trả về là void.

1
2
3
void printmessage () {
  printf("I'm a function!");
}

Khác với ngôn ngữ C++, các hàm trong ngôn ngữ C thì không thể trùng tên với nhau.

Truyền tham số qua giá trị

Truyền tham số thì hàm sẽ tạo ra một biến mới và sẽ hủy biến này khi hàm thực thi xong.

1
2
3
4
5
6
7
8
void add_one(int n) {
  n++;
}
int main() {
  int n = 10;
  add_one(n);
  printf("%d", n); // kết quả vẫn là 10
}

Khai báo hàm trước khi sử dụng

Ví dụ sau đây sẽ khai báo hàm trước khi sử dụng. Khai báo hàm gồm có kiểu trả về, tên hàm, danh sách tham số chứ không có nội dung hàm.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// khai báo hàm addition sẽ được cài đặt
int addition (int a, int b); 

int main() {
  int sum = addition(1,2);
  printf("%d", sum);
}

// cài đặt hàm addition đã khai báo trước đó
int addition (int a, int b) { 
  return a + b;
}

Truyền tham số là con trỏ

Nếu muốn thay đổi giá trị của dữ liệu của tham số khi truyền vào, hãy truyền vào con trỏ.

1
2
3
4
5
6
7
8
void add_one(int* p) {
  (*p)++;
}
int main() {
  int n = 10;
  add_one(&n);
  printf("%d", n); // kết quả là 11
}

Hàm main

Hàm main có đặc điểm khác với các hàm khác như sau:

  • Chỉ có một hàm main duy nhất trong chương trình.
  • Chương trình sẽ bắt đầu chạy từ hàm main.
  • Hàm main có thể nhận tham số hoặc không nhận tham số.
  • Hàm main có thể trả về một số kiểu int. Trong <stdlib> có định nghĩa EXIT_SUCCESS là 0 và EXIT_FAILURE là 1.