Con trỏ và hàm trong C

 

Con trỏ và hàm trong C

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é.



Hình ảnh mô phỏng tham chiếu (pass by reference) trong C++ và tham trị (pass by value) trong C/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

Lưu ý: Tham chiếu là khái niệm chỉ có trong C++. Với C, cách tương tự để truyền tham chiếu là sử dụng truyền con trỏ. Với tham trị (truyền giá trị) thì C và C++ là giống nhau.

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 a và b 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 con trỏ 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 con trỏ 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.

Không có nhận xét nào:

Được tạo bởi Blogger.