Bài 65. Con trỏ và hàm trong C

Con Trỏ Và Hàm

Trong bài viết này, Lập trình không khó sẽ trình bày về con trỏ và hàm trong C: bao gồm tham chiếu trong C truyền con trỏ vào hàm, để có thể hiểu được bài viết này, các bạn cần nắm rõ kiến thức về con trỏ trong C. Cụ thể, bạn sẽ hiểu được cách truyền địa chỉ làm tham số trong hàm – đó chính là tham chiếu. Mình sẽ luôn có các ví dụ để các bạn hiểu rõ vấn đề nhất.

Mối liên hệ giữa con trỏ và hàm

Trong ngôn ngữ C, bạn hoàn toàn có thể truyền địa chỉ của biến hoặc con trỏ làm tham số của hàm. Để hàm có thể nhận địa chỉ, ta đưa vào các tham số là biến con trỏ. Hãy lấy ví dụ để hiểu rõ vấn đề nhé.

Tham Chiếu Và Tham Trị
Hình ảnh mô phỏng tham chiếu (pass by reference) và tham trị (pass by value) trong C. Trong đó cup là một biến được truyền vào lời gọi hàm fillCup(). Khi truyền theo tham chiếu thì hàm có khả năng thay đổi giá trị của tham số của hàm; Còn truyền theo tham trị thì hàm không thể thay đổi giá trị của tham số. Nguồn ảnh: mathwarehouse

Nếu bạn đang tìm kiếm tham trị và tham chiếu trong C++, xem bài viết này nhé.

Tham chiếu trong C

Chúng ta hãy cùng thử viết 1 hàm hoán vị 2 số nguyên nhé.

Kết quả chạy:

Bạn có thể thấy, hàm con không thay đổi giá trị của biến ab trong hàm main(). Đó là bởi hàm của bạn đang truyền bởi tham trị – nghĩa là khi hàm swap() được gọi thì 2 tham số đó sẽ được hàm này sao chép sang 2 vùng nhớ mới, mọi thay đổi được thực hiện trên bản sao này.

Bây giờ, ta hãy thử truyền tham chiếu như sau:

Kết quả chạy:

Đúng như những gì đã trình bày rõ ràng trong bài con trỏ, khi ta có địa chỉ của biến (con trỏ lưu) thì ta có thể thay đổi giá trị của biến mà con trỏ đang trỏ tới. Đó chính là cách truyền tham chiếu trong C.

Truyền con trỏ vào hàm trong C

Bạn đã quá quen thuộc với việc truyền giá trị vào hàm – truyền tham trị như đoạn code đầu tiên của bài. Chúng ta cũng vừa nắm được cách truyền tham chiếu trong C. Ở phần này, bạn sẽ cùng tôi đi xem xét cách truyền con trỏ vào hàm trong C như thế nào.

Trong ví dụ trên, chúng ta truyền con trỏ p vào hàm addOne(), hàm này có chức năng tăng giá trị của biến nơi con trỏ đang trỏ tới. Vì ta truyền vào biến con trỏ nên giá trị của p trong hàm main() cũng sẽ bị thay đổi.

Theo dõi lập trình không khó tại:

avatar
  Subscribe  
Notify of