Spiral Rule - Bí Kíp Giúp Chinh Phục Con Trỏ Trong C++

Spiral Rule - Bí Kíp Giúp Chinh Phục Con Trỏ Trong C++

Từ cổ chí kim đến nay, C++ là một ngôn ngữ lập trình được đánh giá cao bởi khả năng và tốc độ của nó, nhưng bên cạnh đó, trong giới lập trình thường ví von C++ giống như là một con BOSS khủng trong hành trình chinh phục ngành lập trình, nói như vậy cũng không sai, bởi vì C++ cực kỳ khó, nếu bạn master C++ thì gần như bạn đã nắm được bí quyết để chinh phục mọi ngôn ngữ khác rồi. Mà một điều làm nên độ "khủng bố" như vậy của C++, đó chính là con trỏ và các kiểu khai báo của nó, một thứ gì đó rất chi là . . . 

Vì lẽ đó, hôm nay mình xin được chia sẻ một bí kíp để chinh phục nó. Đó chính là kỹ thuật (hoặc quy luật) Clockwise/Spiral rule, là một kỹ thuật dùng để nhận biết và hiểu bất kỳ một kiểu khai báo nào trong C/C++, thường được dùng để đối phó con trỏ.

Kỹ thuật này được bắt nguồn từ http://c-faq.com/decl/spiral.anderson.html, được viết năm 1993, 1994 bởi David Anderson, bản gốc tiếng Việt do anh Hà Chí Hào đúc kết và chia sẻ. Hay xưng danh tiếng Việt của nó là "kỹ thuật vòng xoáy kim đồng hồ" :

Theo như chia sẻ của anh Hào, bài viết được anh đúc kết ra qua một lần làm bài tập được giao trên lớp. Cụ thể, anh được giao cho 10 con trỏ và phải giải thích ý nghĩa của chúng. Qua thời gian tìm hiểu, với kinh nghiệm của mình, anh cho ra được một bản dịch tạm thời của kỹ thuật này, khả năng mà kỹ thuật này mang lại chính là giải nghĩa bất kỳ kiểu khai báo nào trong C/C++, được thể hiện trực quan tại trang web https://cdecl.org/.

Khái quát kỹ thuật

Cốt lõi của kỹ thuật là một vòng xoáy bắt đầu từ tên biến, rồi đi theo chiều kim đồng hồ, nếu gặp những ký tự như dấu ngoặc vuông "[", "]", dấu sao "*", . . . sẽ chuyển thành những mô tả về nó:

Cụ thể:

  • [x] : mảng có x phần tử
  • (a, b) : hàm có tham số a,b và trả về . . .
  • * : con trỏ tới . . .

Cứ xoay đều, xoay đều, xoay đều mãi tới khi kết thúc những ký tự trên. (Ưu tiên các ký hiệu trong ngoặc)

Lưu ý: Khi mũi tên chỉ tới "(" hoặc "[" thì đồng thời nó cũng sẽ chỉ tới tất cả mọi thứ từ 2 ký tự đó tới ")" hoặc "]"

Thực hiện kỹ thuật

Xin được mô tả bằng các ảnh sau:

Kết luận

Tuy đây đã là một bí tịch thất truyền từ năm 1993, trong vòng 20 năm nay đã không thấy mặt nó trong võ lâm, nhưng nội công mà nó mang lại cho người tu luyện vẫn không thể khinh nhờn. Nắm được nó thì mọi con trỏ, kiểu khai báo trong C++ sẽ rất đơn giản đối với bạn. Cực kỳ hữu ích với người mới !