Con trỏ & Hằng trong C++

Khóa học lập trình C++ căn bản

5.0 (8 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 5 năm trước 44.063 lượt xem 3 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

01. Giới thiệu về C++ 02. Cài đặt môi trường phát triển (IDE) Visual studio 2015 03. Xây dựng chương trình C++ đầu tiên với Visual Studio 2015 04. Cấu trúc một chương trình C++ (Structure of a program) 05. Ghi chú trong C++ (Comments in C++) 06. Biến trong C++ (Variables in C++) 07. Số tự nhiên và Số chấm động trong C++ (Integer, Floating point) 08. Kiểu ký tự trong C++ (Character) 09. Kiểu luận lý và cơ bản về Câu điều kiện If (Boolean and If statements) 10. Nhập, Xuất và Định dạng dữ liệu trong C++ (Input and Output) 11. Hằng số trong C++ (Constants) 12. Toán tử số học, toán tử tăng giảm, toán tử gán số học trong C++ (Operators) 13. Toán tử quan hệ, logic, bitwise, misc và độ ưu tiên toán tử trong C++ 14. Cơ bản về chuỗi ký tự trong C++ (An introduction to std::string) 15. Biến cục bộ trong C++ (Local variables in C++) 16. Biến toàn cục trong C++ (Global variables in C++) 17. Biến tĩnh trong C++ (Static variables in C++) 18. Ép kiểu ngầm định trong C++ (Implicit type conversion in C++) 19. Ép kiểu tường minh trong C++ (Explicit type conversion in C++) 20. Cơ bản về Hàm và Giá trị trả về (Basic of functions and return values) 21. Truyền Giá Trị cho Hàm (Passing Arguments by Value) 22. Truyền Tham Chiếu cho Hàm (Passing Arguments by Reference) 23. Tiền khai báo và Định nghĩa Hàm (Forward declarations and Definitions of Functions) 24. Giới thiệu về cấu trúc điều khiển (Control flow introduction) 25. Câu điều kiện If và Toán tử điều kiện (If statements and Conditional operator) 26. Câu điều kiện Switch trong C++ (Switch statements) 27. Câu lệnh Goto trong C++ (Goto statements) 28. Vòng lặp While trong C++ (While statements) 29. Vòng lặp Do while trong C++ (Do while statements) 30. Vòng lặp For trong C++ (For statements) 31. Từ khóa Break and continue trong C++ 32. Phát sinh số ngẫu nhiên trong C++ (Random number generation) 33. Mảng 1 chiều trong C++ (Arrays) 34. Các thao tác trên Mảng một chiều 35. Mảng 2 chiều trong C++ (Two-dimensional arrays) 36. Các thao tác trên Mảng 2 chiều 37. Mảng ký tự trong C++ (C-style strings) 38. Các thao tác trên Mảng ký tự (C-style strings) 39. Từ khóa auto trong C++11.(The auto keyword) 40. Vòng lặp for each trong C++11 (For each loops) 41. Lớp dựng sẵn Array trong C++11 42. Con trỏ cơ bản trong C++ 43. Con trỏ NULL trong C++ (NULL pointers) 44. Con trỏ và mảng trong C++ (Pointers and arrays) 45. Các phép toán trên Con trỏ và Chỉ mục mảng trong C++ (Pointers and arrays) 46. Cấp phát động trong C++ (Dynamic memory allocation). 47. Cấp phát mảng động (Dynamically allocating arrays) 48. Con trỏ & Hằng trong C++ 49. Biến tham chiếu trong C++.(Reference variables) 50. Con trỏ void (Void pointers) 51. Con trỏ trỏ đến con trỏ (Pointers to pointers) 52. Cơ bản về lớp Vector 53. Truyền địa chỉ cho hàm (Passing arguments by address) 54. Hàm trả về giá trị, tham chiếu và địa chỉ trong C++(value, reference, and address) 55. Hàm nội tuyến trong C++ (Inline functions) 56. Nạp chồng hàm trong C++ (Function overloading) 57. Hàm có đối số mặc định trong C++ (Default arguments) 58. Con trỏ hàm trong C++ (Function pointers) 59. Đệ quy trong C++ (Recursion) 60. Khuôn mẫu hàm trong C++ (Function templates)

Con trỏ & Hằng trong C++

Dẫn nhập

Ở bài học trước, bạn đã nắm được cách CẤP PHÁT MẢNG ĐỘNG (Dynamically allocating arrays). Với kỹ thuật này, bạn có thể sử dụng mảng với số lượng phần tử lớn hơn và có thể thay đổi trong quá trình chạy chương trình.

Hôm nay, chúng ta sẽ cùng tìm hiểu về Con trỏ và Hằng (Pointers and const) trong C++.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về:

Trong bài ta sẽ cùng tìm hiểu các vấn đề:

  • Con trỏ hằng (Pointer to const value)
  • Hằng con trỏ (Const pointers)
  • Hằng con trỏ hằng (Const pointer to a const value)

Con trỏ hằng (Pointer to const value)

Ở thời điểm này, có thể bạn đã quen thuộc với đoạn code bên dưới:

Đoạn code trên hoạt động một cách bình thường. Tuy nhiên, nếu value là một hằng, chương trình sẽ gây ra lỗi:

Trong ví dụ trên, value lúc này là một hằng, nghĩa là giá trị của hằng value sẽ không thể thay đổi trong suốt vòng đời của chương trình. Vì vậy, việc gán một biến con trỏ cho một hằng sẽ gây ra lỗi biên dịch.

Chú ý: Thông thường, khi nói một biến con trỏ (hoặc con trỏ), điều đó nghĩa là một con trỏ trỏ đến một biến.

Để dùng con trỏ trỏ đến một hằng, C++ cung cấp cho chúng ta khái niệm con trỏ hằng (Pointer to const value).

Con trỏ hằng (Pointer to const value) là con trỏ trỏ đến vùng dữ liệu hằng. Ta không thể thay đổi giá trị mà nó đang trỏ đến. Nhưng có thể cho nó trỏ đến một địa chỉ vùng nhớ khác.

Mặt khác, con trỏ hằng có thể trỏ đến một biến:

Chú ý: Con trỏ hằng xử lý giá trị tại địa chỉ mà nó trỏ tới là hằng khi được truy cập thông qua con trỏ, bất kể biến ban đầu được định nghĩa là hằng hay không.

con trỏ hằng là con trỏ trỏ đến vùng dữ liệu hằng (không phải hằng con trỏ), nên nó có thể trỏ đến một địa chỉ vùng nhớ khác:


Hằng con trỏ (Const pointers)

Ngược lại với con trỏ hằng, hằng con trỏ (const pointers) là con trỏ không thể thay đổi được địa chỉ vùng nhớ mà nó lưu trữ, nhưng có thể thay đổi được giá trị mà nó trỏ đến.

Chú ý: Như một hằng thông thường, con trỏ hằng phải được khởi tạo khi khai báo, và địa chỉ được gán cho con trỏ hằng sẽ không thể thay đổi về sau.

Tuy nhiên, vì biến value được ptr trỏ đến không phải hằng, nên hằng con trỏ ptr có thể thay đổi giá trị biến value:


Hằng con trỏ hằng (Const pointer to a const value)

Khi kết hợp giữa hằng con trỏ con trỏ hằng với nhau, ta có thể có một con trỏ vừa không thay đổi được địa chỉ vùng nhớ mà nó lưu trữ, vừa không thay đổi được giá trị của vùng nhớ đó.

Để sử dụng hằng con trỏ hằng, ta sử dụng 2 từ khóa const như sau:

Chú ý: Một hằng con trỏ hằng không thể trỏ đến một địa chỉ khác, cũng như giá trị mà nó trỏ đến sẽ không thể thay đổi thông qua con trỏ.


Kết luận

Qua bài học này, bạn đã nắm được các khái niệm liên quan đến Con trỏ và Hằng (Pointers and const) trong C++. Ba từ khóa con trỏ hằng, hằng con trỏ và hằng con trỏ hằng tương đối dễ nhầm lẫn khi khai báo và sử dụng, mình tin bài học này đã giúp bạn hiểu rõ hơn về nó.

Con trỏ hằng thường được sử dụng chủ yếu trong các tham số hàm (hàm hoặc đối số có mục đích read-only) để giúp đảm bảo hàm không vô tình thay đổi đối số được truyền vào trong hàm.

Trong bài tiếp theo, mình sẽ giới thiệu cho các bạn khái niệm BIẾN THAM CHIẾU TRONG C++ (Reference variables).

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Con trỏ & Hằng trong C++ dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C++ căn bản

Hiện nay, C++ đã là cái tên rất quen thuộc trong ngành lập trình. Mặc dù C++ là ngôn ngữ lập trình đã ra đời khá lâu, nhưng không phải ai cũng có cơ hội để tìm hiểu về nó.

Vì vậy, Kteam đã xây dựng lên khóa học LẬP TRÌNH C++ CĂN BẢN để cung cấp một lượng kiến thức về ngôn ngữ C++ nói riêng, và các khái niệm khác trong lập trình nói chung.

Nội dung khóa học sẽ được phân tách một cách chi tiết, nhằm giúp các bạn dễ hiểu và thực hành được ngay. Serial dành cho những bạn chưa có bất kỳ kiến thức gì về lập trình, hoặc những bạn mất căn bản muốn lấy lại kiến thức nền tảng lập trình, cụ thể là C++.

Đánh giá

5.0
8 đánh giá
Đánh giá
5
8
4
3
2
1
win1702 đã đánh giá 9 tháng trước

Trhao_204 đã đánh giá 2 năm trước

KTwimoke đã đánh giá 3 năm trước

Trần Minh Nhật đã đánh giá 3 năm trước

Tien Dung đã đánh giá 3 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
socute đã bình luận 5 năm trước

anh giảng bài này nói hay quá, nghe cách nói chuyện đáng yêu ghê, tạo cảm hứng học lắm luôn ý hihi. Em nay năm nay là sv năm 2 cntt rồi mà bị mất gốc do năm nhất lơ ngơ học nguồn tùm lum à, nhưng may mắn giờ đã tìm được Howkteam rồi ^^

nguyenhoainam426 đã bình luận 6 năm trước

anh ơi không có link download tài liệu bài 48,49 hả anh???

Crezol đã bình luận 7 năm trước

Ra video team ơi e hóng dài cổ rồi, video trình bày rất hay chứ đọc tài liệu nản quả!
Chúc team ngày càng phát triển để những men ko có điều kiện có thể học ké hehe

 

Không có video.