type name ( argument1, argument2, ...) statement
trong đó: type là kiểu dữ liệu được trả về của hàm name là tên gọi của hàm. arguments là các tham số (có nhiều bao nhiêu cũng được tuỳ theo nhu cầu). Một tham số bao gồm tên kiểu dữ liệu sau đó là tên của tham số giống như khi khai báo biến (ví dụ int x) và đóng vai trò bên trong hàm như bất kì biến nào khác. Chúng dùng để truyền tham số cho hàm khi nó được gọi. Các tham số khác nhau được ngăn cách bởi các dấu phẩy. statement là thân của hàm. Nó có thể là một lệnh đơn hay một khối lệnh.
Dưới đây là ví dụ đầu tiên về hàm:
#include<stdio.h>
#include<conio.h>
int tich(int a, int b)
{
int t;
t = a*b;
return(t);
}
void main()
{
int a, b,s;
printf("nhap vao 2 so muon tinh tich\n");
scanf_s("%d%d", &a, &b);
s = tich(a, b);
printf("tich =%d", s);
_getch();
}
Để có thể hiểu được đoạn mã này, trước hết hãy nhớ lại những điều đã nói ở bài đầu tiên: một chương trình C luôn bắt đầu thực hiện từ hàm main. Vì vậy chúng ta bắt đầu từ đây.
Chúng ta có thể thấy hàm main bắt đầu bằng việc khai báo biến,nhập dữ liệu, sau đó là một lời gọi tới hàm . Nếu để ý chúng ta sẽ thấy sự tương tự giữa cấu trúc của lời gọi hàm với khai báo của hàm. lệnh return (t) chính là giá trị được trả về của hàm.
Bạn cần nhớ rằng phạm vi hoạt động của các biến khai báo trong một hàm hay bất kì một khối lệnh nào khác chỉ là hàm đó hay khối lệnh đó và không thể sử dụng bên ngoài chúng. Ví dụ, trong chương trình ví dụ trên, bạn không thể sử dụng trực tiếp các biến a, b vì chúng là các biến cục bộ của hàm
Tuy nhiên bạn có thể khai báo các biến toàn cục để có thể sử dụng chúng ở bất kì đâu, bên trong hay bên ngoài bất kì hàm nào. Để làm việc này bạn cần khai báo chúng bên ngoài mọi hàm hay các khối lệnh, có nghĩa là ngay trong thân chương trình.
#include<stdio.h>
#include<conio.h>
int a, b, t, s;
int tich(int a,int b)
{
t = a*b;
return(t);
}
void main()
{
printf("nhap vao 2 so muon tinh tich\n");
scanf_s("%d%d", &a, &b);
s = tich(a, b);
printf("tich =%d", s);
_getch();
}
các cách khác nhau mà một hàm có thể được gọi.
1. tich(a,b); với a,b là biến đã có giá trị
2.tich(12,7); ta thay trực tiếp giá trị và hàm.
hàm có thể đươc gọi ra ngay trong lệnh xuất của ngôn ngữ c++. hay trong các phép tính toán như là 1 số bình thường.
- các hàm không kiểu, cách sử dụng void:
type name ( argument1, argument2 ...) statement
bạn sẽ thấy rõ ràng rằng nó bắt đầu với một tên kiểu, đó là kiểu dữ liệu sẽ được hàm trả về bởi lệnh return. Nhưng nếu chúng ta không muốn trả về giá trị nào thì sao ?
Hãy tưởng tượng rằng chúng ta muốn tạo ra một hàm chỉ để hiển thị một thông báo lên màn hình. Nó không cần trả về một giá trị nào cả, hơn nữa cũng không cần nhận tham số nào hết. Vì vậy người ta đã nghĩ ra kiểu dữ liệu void trong ngôn ngữ C. Hãy xem xét chương trình sau:
#include<stdio.h>
#include<conio.h>
void in(void)
{
printf("in ra man hinh");
}
void main()
{
in();
_getch();
}
Từ khoá void trong phần danh sách tham số có nghĩa là hàm này không nhận một tham số nào. Tuy nhiên trong C không cần thiết phải sử dụng void để làm điều này. Bạn chỉ đơn giản sử dụng cặp ngoặc đơn ( ) là xong