Mọi thứ bạn cần biết về các hàm trong C?



Bài viết này sẽ giới thiệu cho bạn một khái niệm đơn giản nhưng rất cơ bản và quan trọng đó là Functions in C và theo dõi nó bằng một minh họa.

Bài viết này sẽ giới thiệu cho bạn một cách đơn giản nhưng rất cơ bản và quan trọng khái niệm đó là các Hàm trong C và theo dõi nó bằng một minh chứng. Các gợi ý sau sẽ được đề cập trong bài viết này,

Các hàm là các khối xây dựng của bất kỳ ngôn ngữ lập trình nào. Nói cách đơn giản, hàm trong một tập hợp các câu lệnh, nhận đầu vào, thực hiện một tác vụ cụ thể và sau đó trả về đầu ra.
Ý thức hệ đằng sau chức năng tạo là liên kết một tập hợp các câu lệnh liên quan với nhau để thực hiện một nhiệm vụ cụ thể. Vì vậy, bạn không phải viết cùng một mã nhiều lần cho các nhóm đầu vào khác nhau. Bạn chỉ cần gọi hàm cho các đầu vào khác nhau, nó sẽ thực hiện nhiệm vụ được chỉ định cho đầu vào đã cho và trả lại đầu ra. Bạn có thể gọi hàm bao nhiêu lần tùy ý. Trong blog này, chúng ta sẽ tìm hiểu từng & sắc thái về các hàm trong ngôn ngữ lập trình C.





Chúng ta hãy bắt đầu với câu hỏi cơ bản nhất.

Các hàm trong C là gì?

Các chức năng trong C giống với bất kỳ ngôn ngữ lập trình nào khác. Nó là một tập hợp các mã liên kết với nhau để thực hiện một nhiệm vụ cụ thể. Bộ mã được thực thi được chỉ định trong dấu ngoặc nhọn, tức là '{}'.



Trước khi học cách viết một hàm trong C, trước tiên chúng ta hãy hiểu những lợi thế là gì.

Ưu điểm của các hàm trong C

Ưu điểm của các hàm là phổ biến trên tất cả các ngôn ngữ lập trình.
Ý tưởng chính đằng sau chức năng là giảm bớt sự dư thừa trong mã. Giả sử bạn có một chức năng cần được thực hiện nhiều lần trong một chương trình, vì vậy thay vì viết nó nhiều lần, bạn có thể tạo một hàm cho tác vụ đó và gọi nó bao nhiêu lần tùy ý. Một lợi ích tiềm ẩn khác là, nếu logic của chức năng của bạn thay đổi sau đó, thì bạn không cần phải tiếp tục và thay đổi nó ở nhiều nơi. Bạn chỉ cần thay đổi mã tại một nơi (tức là trong hàm) và nó sẽ được phản ánh trong suốt chương trình.

Tính mô-đun lại là một lợi ích bổ sung. Viết một đoạn mã lớn bao gồm từng & mọi thứ, làm giảm khả năng đọc của mã và gây khó khăn cho việc quản lý. Bạn có thể chia mã thành các phần cho các chức năng riêng lẻ bằng cách sử dụng các chức năng, điều này đơn giản hơn để hiểu và dễ quản lý hơn.



Hàm cũng cung cấp tính trừu tượng, nơi chúng ta có thể gọi một hàm và lấy đầu ra mà không cần biết việc triển khai bên trong.

Tiếp tục với các loại Hàm C

Các loại hàm trong C

Có hai loại chức năng:
Chức năng thư viện
Các chức năng do người dùng xác định

Các hàm thư viện là các hàm đã được định nghĩa sẵn trong thư viện C như strcat (), printf (), scanf (), v.v. Bạn chỉ cần đưa vào các tệp tiêu đề thích hợp để sử dụng các hàm này.
Các chức năng do người dùng xác định là những chức năng được xác định bởi người dùng. Các chức năng này được tạo ra để có thể tái sử dụng mã và tiết kiệm thời gian và không gian.

Bây giờ chúng ta đã biết những lợi ích của việc tạo một hàm, chúng ta hãy hiểu cách khai báo một hàm trong C.

Khai báo & Định nghĩa hàm

Khai báo hàm:

Cú pháp khai báo hàm:

return_type function_name (data_type arg1, data_type arg2) int add (int x, int y) // khai báo hàm

Trong Khai báo hàm, chúng tôi chỉ định tên của hàm, số lượng tham số đầu vào, kiểu dữ liệu của chúng và kiểu trả về của hàm. Khai báo hàm cho trình biên dịch biết về danh sách các đối số mà hàm đang mong đợi với các kiểu dữ liệu của chúng và kiểu trả về của hàm.

Trong khai báo hàm, chỉ định tên của tham số là tùy chọn, nhưng chỉ định kiểu dữ liệu của chúng là bắt buộc.

int add (int, int) // khai báo hàm

Hàm được chỉ định ở trên sẽ nhận hai tham số nguyên.

Định nghĩa hàm

 Hình ảnh- Các chức năng trong C- Edureka
int add (int, int) // khai báo hàm return_type function_name (tham số) {Nội dung hàm}

Như được hiển thị trong hình trên, một định nghĩa hàm bao gồm hai phần tức là tiêu đề hàm và nội dung hàm

Tiêu đề chức năng: tiêu đề hàm giống như khai báo hàm không có dấu chấm phẩy. Tiêu đề hàm chứa tên hàm, tham số và kiểu trả về.

  • Loại trả lại: Kiểu trả về là kiểu dữ liệu của giá trị sẽ được trả về bởi hàm. Hàm có thể trả về hoặc không trả về giá trị. Nếu đúng thì kiểu dữ liệu của giá trị đang truy xuất phải được chỉ định, nếu không thì kiểu trả về cần phải trống.

  • Tên chức năng: Đây là tên của hàm sử dụng mà chúng ta có thể gọi hàm khi & khi cần thiết.

  • Thông số: Các tham số là các giá trị đầu vào sẽ được chuyển cho hàm. Nó cho biết về kiểu dữ liệu của các đối số, thứ tự của chúng và số lượng đối số sẽ được truyền cho hàm. Các tham số là tùy chọn. Bạn cũng có thể có các chức năng không có tham số.

Cơ quan chức năng: Phần thân hàm là tập hợp các câu lệnh thực hiện một tác vụ cụ thể. Nó xác định chức năng làm gì.

Thí dụ:

int add (int x, int y) {int sum = x + y return (sum)}

Bạn nên khai báo một hàm trước khi chúng ta định nghĩa và sử dụng nó. Trong C, chúng ta có thể khai báo & định nghĩa hàm tại cùng một nơi.

Thí dụ:

#include int add (int, int) // khai báo hàm // định nghĩa hàm int add (int x, int y) // tiêu đề hàm {// nội dung hàm int sum = x + y return (sum)} // Hàm chính int main () {int sum = add (23, 31) printf ('% d', sum) return 0}

Như chúng ta có thể thấy trong ví dụ trên rằng chúng ta đang gọi hàm bằng cách sử dụng câu lệnh int sum = add (23, 31). Giá trị trả về từ hàm được lưu trữ trong biến tổng.

Trước khi chúng ta tiếp tục, có một khái niệm quan trọng hơn cần hiểu về parament. Có hai loại tham số:

Tham số thực tế : Những tham số được truyền cho các hàm trong khi gọi chúng được gọi là tham số thực. Ví dụ, 23 & 31 trong ví dụ trên là các tham số thực tế.

Tham số chính thức : Những tham số được nhận bởi các hàm được gọi là tham số chính thức. Ví dụ: x & y trong ví dụ trên là các tham số chính thức.

Hãy nhanh chóng tiếp tục và hiểu các cách khác nhau để gọi một hàm trong C.

Gọi một hàm

Có hai cách mà chúng ta có thể gọi một hàm:

  • Gọi theo giá trị
  • Gọi bằng cách tham khảo

Gọi theo giá trị

Trong phương thức gọi theo giá trị, giá trị của tham số thực được truyền như một đối số cho hàm. Giá trị của tham số thực không thể bị thay đổi bởi các tham số chính thức.

Trong phương thức gọi be value, địa chỉ bộ nhớ khác nhau được cấp cho các tham số chính thức và thực tế. Chỉ giá trị của tham số thực được sao chép sang tham số chính thức.

Thí dụ:

#include void Call_By_Value (int num1) {num1 = 42 printf ('nInside Function, Number is% d', num1)} int main () {int num num = 24 printf ('nBefore Function, Number is% d', num ) Call_By_Value (num) printf ('nA After Function, Number is% dn', num) return 0}

Đầu ra

Trong ví dụ trên, trước khi gọi hàm value, giá trị của num là 24. Sau đó, khi chúng ta gọi hàm và chuyển giá trị và thay đổi nó bên trong hàm, nó sẽ trở thành 42. Khi chúng ta quay lại & in lại giá trị của num trong hàm chính, nó trở thành 24.

Gọi bằng cách tham khảo

Trong lệnh gọi bằng tham chiếu, địa chỉ bộ nhớ của tham số thực được truyền cho hàm dưới dạng đối số. Ở đây, giá trị của tham số thực có thể được thay đổi bởi tham số chính thức.

Địa chỉ bộ nhớ giống nhau được sử dụng cho cả tham số chính thức và thực tế. Vì vậy, nếu giá trị của tham số hình thức được sửa đổi, nó cũng được phản ánh bởi tham số thực.

Trong C, chúng tôi sử dụng con trỏ để thực hiện cuộc gọi bằng tham chiếu. Như bạn có thể thấy trong ví dụ dưới đây, hàm Call_By_Reference đang mong đợi một con trỏ đến một số nguyên.

Bây giờ, biến num1 này sẽ lưu trữ địa chỉ bộ nhớ của tham số thực. Vì vậy, để in giá trị được lưu trong địa chỉ bộ nhớ được trỏ bởi num1, chúng ta cần sử dụng toán tử tham chiếu, tức là *. Vì vậy, giá trị của * num1 là 42.

Toán tử địa chỉ & được sử dụng để lấy địa chỉ của một biến thuộc bất kỳ kiểu dữ liệu nào. Vì vậy, trong câu lệnh gọi hàm ‘Call_By_Reference (& num)’, địa chỉ của num được chuyển để num có thể được sửa đổi bằng địa chỉ của nó.

Thí dụ

#include // định nghĩa hàm void Call_By_Reference (int * num1) {* num1 = 42 printf ('nInside Function, Number is% d', * num1)} // Hàm chính int main () {int num num = 24 printf ( 'nBefore Function, Number is% d', num) Call_By_Reference (& num) printf ('nAfter Function, Number is% dn', num) return 0}

Đầu ra

Trong ví dụ này, giá trị của num là 24 ban đầu, bên trong hàm main. Sau khi nó được chuyển đến hàm Call_By_Reference và giá trị được sửa đổi bởi tham số chính thức, nó cũng bị thay đổi cho tham số thực. Đây là lý do tại sao khi chúng ta in giá trị của num sau hàm nó đang in 42.

chuỗi java chia nhiều dấu phân cách

Tiếp tục với các loại chức năng do người dùng xác định trong C

Các loại do người dùng xác định Chức năng trong C

Có nhiều loại hàm do người dùng xác định dựa trên kiểu trả về và các đối số được truyền vào.

Tiếp tục với Không có đối số nào được truyền và không có giá trị trả về

1. không có đối số nào được truyền và không có giá trị trả về

Cú pháp:

khai báo hàm:

void function () function call: function () function format: void function () {statement}

Thí dụ

#include void add () void add () {int x = 20 int y = 30 int sum = x + y printf ('sum% d', sum)} int main () {add () return 0}

Tiếp tục với Không có đối số nào được truyền ngoài giá trị trả về

2 Không có đối số nào được truyền nhưng có giá trị trả về

Cú pháp:

khai báo hàm:

int function () hàm gọi: function () định nghĩa hàm: int function () {các câu lệnh trả về a}

Thí dụ:

#include int add () int add () {int x = 20 int y = 30 int sum = x + y return (sum)} int main () {int sum sum = add () printf ('sum% d', sum) trả về 0}

Tiếp tục với các Đối số được thông qua nhưng không có giá trị trả lại

3 Đối số được thông qua nhưng không có giá trị trả về

Cú pháp:

khai báo hàm:

void function (int) function call: function (a) function format: void function (int a) {statement}

Thí dụ:

#include void add (int, int) void add (int x, int y) {int sum = x + y return (sum)} int main () {add (23, 31) return 0}

Tiếp tục với Đối số được truyền và giá trị trả về

4 Đối số được thông qua và giá trị trả về

Cú pháp:

khai báo hàm:

int function (int) function call: function (a) function format: int function (int a) {câu lệnh trả về a}

Thí dụ

#include int add (int, int) int add (int x, int y) {int sum = x + y return (sum)} int main () {int sum = add (23, 31) printf ('% d' , sum) return 0}

Bây giờ chúng ta hãy nhanh chóng xem xét các hàm thư viện C, những hàm quan trọng để viết một chương trình.

Chức năng Thư viện C

Các hàm thư viện là các hàm trong C được định nghĩa trước và được hiển thị theo mặc định. Bạn chỉ cần đưa tệp tiêu đề cụ thể vào chương trình và bạn có thể sử dụng các hàm được xác định trong tệp tiêu đề đó. Mỗi tệp tiêu đề cung cấp loại chức năng cụ thể. Phần mở rộng của tệp tiêu đề là .h.

Ví dụ: để sử dụng các hàm printf / scanf, chúng ta cần đưa stdio.h vào chương trình của mình, hàm này cung cấp các chức năng liên quan đến đầu vào / đầu ra tiêu chuẩn.

Sau đây là danh sách các tệp tiêu đề.

mộtstdio.hTệp tiêu đề đầu vào / đầu ra tiêu chuẩn
2đúc tiền.hTệp tiêu đề đầu vào / đầu ra của bảng điều khiển
3string.hCác hàm thư viện liên quan đến chuỗi như get (), put (), v.v.
4stdlib.hCác hàm thư viện chung như malloc (), calloc (), exit (), v.v.
5toán học.hCác hàm liên quan đến phép toán như sqrt (), pow (), v.v.
6time.hCác chức năng liên quan đến thời gian
7ctype.hCác chức năng xử lý ký tự
số 8stdarg.hHàm đối số biến
9signal.hChức năng xử lý tín hiệu
10setjmp.hChức năng nhảy
mười mộtlocale.hChức năng ngôn ngữ
12errno.hCác chức năng xử lý lỗi
13khẳng định.hChức năng chẩn đoán

Bây giờ sau khi xem qua các hàm C ở trên, bạn sẽ hiểu từng & mọi sắc thái của hàm và cách triển khai nó trong ngôn ngữ C. Tôi hy vọng blog này là thông tin và giá trị gia tăng cho bạn.

Như vậy là chúng ta đã đến phần cuối của bài viết này về 'Các hàm trong C'. Nếu bạn muốn tìm hiểu thêm, hãy xem , một công ty học trực tuyến đáng tin cậy. Khóa học đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.