C++ Con trỏ (Pointer) toàn thư: Phần 0 - Giới thiệu dàn bài.
Đây là 1 seri bài viết về một thứ mà mọi người đều nói nó là thứ "khốn nạn" nhất của C/C++; và cũng chính nó đã trở thành lý do phổ biến khiến nhiều lập trình viên vô cùng ác cảm với C/C++. Ko gì khác, đó chính là CON TRỎ (POINTER)! Và từ nay, thay vì nói C/C++, mình sẽ chỉ nói C++. Lý do là vì 2 thằng này nó thực sự chỉ là 1; kiểu như bạn thời trẻ trâu và bạn thời trưởng thành ấy mà! Mình sẽ viết 1 bài viết để khẳng định điều này sau; còn bây giờ là thời lượng dành cho Pointer.
Con trỏ là 1 khái niệm chỉ được lập trình viên sử dụng ở ngôn ngữ lập trình C++. Mình nhấn mạnh là "chỉ được lập trình viên sử dụng" nhé! Nghĩa là trong những ngôn ngữ lập trình khác vẫn sẽ có sử dụng con trỏ!
Đọc đến đây chắc hẳn nhiều bạn sẽ tự thắc mắc kiểu "Java làm j có con trỏ đâu, code sướng vãi; chưa nói đến Python ...". Đúng vậy, khi code Java, bạn sẽ ko gặp đến cái j gọi là con trỏ; vì máy ảo JVM đã xử lý hết cho bạn rồi. Và cái mà JVM xử lý ở đây sẽ bao gồm việc "dọn rác". Rác này chính là "vùng nhớ" đã ko còn sử dụng, mà bạn đã xin cấp phát khi chạy chương trình.
Về căn bản, tác dụng của con trỏ là "quản lý bộ nhớ". Với Java, bạn sẽ ko phải tự tay dọn rác của mình, mà đã có JVM dọn hộ (sướng vãi). Còn với C++, bạn phải tự dọn rác của mình, ko có ai dọn hộ cho cả; nhưng đổi lại, nếu bạn dọn rác tốt, chương trình của bạn sẽ chạy nhanh hơn với chương trình mà bạn viết bằng bất cứ ngôn ngữ lập trình nào khác. Đương nhiên rồi, cái j mà chả có sự trade-off! Mình cũng nhấn mạnh là "dọn rác tốt" nhé! Nếu ko biết dọn rác đầy đủ thì bạn vẫn ăn cám thôi; thà viết bằng Java còn hơn! Đó chính là lý do làm người ta ghét C++. Tuy nhiên đó cũng chính là thử thách bạn phải vượt qua để chinh phục và trở lên "thích" C++. Như mình, mặc dù chưa vượt qua nhưng vẫn "thích" C++ hơn bất cứ ngôn ngữ nào khác! Haha!
Quay trở lại con trỏ. Mình dự định sẽ viết seri bài viết này như sau:
Sau khi đọc hết seri bài viết này, mình tin chắc các bạn sẽ củng cố được phần nào hiểu biết của bản thân về Pointer. Seri bài viết này dành cho coder C++ ở bất cứ level nào, kể cả là "chưa biết con khỉ j" về Pointer.
Đọc đến đây chắc hẳn nhiều bạn sẽ tự thắc mắc kiểu "Java làm j có con trỏ đâu, code sướng vãi; chưa nói đến Python ...". Đúng vậy, khi code Java, bạn sẽ ko gặp đến cái j gọi là con trỏ; vì máy ảo JVM đã xử lý hết cho bạn rồi. Và cái mà JVM xử lý ở đây sẽ bao gồm việc "dọn rác". Rác này chính là "vùng nhớ" đã ko còn sử dụng, mà bạn đã xin cấp phát khi chạy chương trình.
Về căn bản, tác dụng của con trỏ là "quản lý bộ nhớ". Với Java, bạn sẽ ko phải tự tay dọn rác của mình, mà đã có JVM dọn hộ (sướng vãi). Còn với C++, bạn phải tự dọn rác của mình, ko có ai dọn hộ cho cả; nhưng đổi lại, nếu bạn dọn rác tốt, chương trình của bạn sẽ chạy nhanh hơn với chương trình mà bạn viết bằng bất cứ ngôn ngữ lập trình nào khác. Đương nhiên rồi, cái j mà chả có sự trade-off! Mình cũng nhấn mạnh là "dọn rác tốt" nhé! Nếu ko biết dọn rác đầy đủ thì bạn vẫn ăn cám thôi; thà viết bằng Java còn hơn! Đó chính là lý do làm người ta ghét C++. Tuy nhiên đó cũng chính là thử thách bạn phải vượt qua để chinh phục và trở lên "thích" C++. Như mình, mặc dù chưa vượt qua nhưng vẫn "thích" C++ hơn bất cứ ngôn ngữ nào khác! Haha!
Quay trở lại con trỏ. Mình dự định sẽ viết seri bài viết này như sau:
Sau khi đọc hết seri bài viết này, mình tin chắc các bạn sẽ củng cố được phần nào hiểu biết của bản thân về Pointer. Seri bài viết này dành cho coder C++ ở bất cứ level nào, kể cả là "chưa biết con khỉ j" về Pointer.
Nhận xét
Đăng nhận xét