Quy tắc xoắn ốc
C
29
C++
30
White

Bùi Hồng Hà viết ngày 23/05/2015

Quy tắc xoắn ốc

Có một quy tắc gọi là "quy tắc xoắn ốc" cho phép lập trình viên C/C++ phân tích trong đầu bất cứ khai báo nào. Quy tắc này rất đơn giản như sau:

  • Bắt đầu bằng tên biến và di chuyển xoắn ốc theo chiều kim đồng hồ.
  • Nếu gặp từ khóa const thì đối tượng nằm trên đường xoắn ốc trước const không đổi.
  • Nếu gập ký tự * thì đối tượng trước khi đến * là một con trỏ.
  • Nếu gặp [] thì đối tượng trước [] là một mảng.
  • Nếu gặp (kiểu dữ liệu 1, kiểu dữ liệu 2), đối tượng trước đó là một function.

Áp dụng

Ta tử áp dụng quy tắc trên để phân tích thử 1 số khai báo.

1. Khai báo đơn giản

                 +-------+
                 | +-+   |
                 | ^ |   |
            char *str[10];
             ^   ^   |   |
             |   +---+   |
             +-----------+

Ý nghĩa: str là một mảng (10 ký tự) con trỏ có kiểu dữ liệu ký tự (char).

2. Con trỏ hàm

          +--------------------+
          | +---+              |
          | |+-+|              |                    
          | |^ ||              |
     char *(*fp)( int, float *);
      ^   ^ ^  ||              |
      |   | +--+|              |
      |   +-----+              |
      +------------------------+

Ý nghĩa: fp là 1 con trỏ, trỏ đến 1 function (nhận 2 đối số là int, và con trỏ kiểu float), trả về 1 con trỏ có kiểu dữ liệu ký tự (char).

3. Const

  • Ví dụ 1

    char greeting[] = "Hello";
           +-----------------+
           |   +-----------+ |
           |   | +-------+ | |
           |   ^ ^       v | | 
    const char * p = greeting;
       ^   ^   ^         | | |
       |   |   |         | | |
       |   |   +---------+ | |
       |   +---------------+ |   
       +---------------------+
    

Ý nghĩa: p có giá trị giống greeting, và là 1 con trỏ, trỏ đến dữ liệu kiểu char, giá trị này là hằng số (không thay đổi).

  • Ví dụ 2

    char greeting[] = "Hello";
             +------------------------+   
             | +-------------------+  |
             | |     +-----------+ |  |
             | |     | +-------+ | |  |
             | |     ^ ^       v | |  |
    const char * const p = greeting;  |
       ^     ^ ^     ^         | | |  |
       |     | |     |         | | |  |
       |     | |     +---------+ | |  |
       |     | +-----------------+ |  |
       |     +---------------------+  |
       +------------------------------+
    

Ý nghĩa: p có giá trị giống greeting, giá trị của p không đổi, và nó là 1 con trỏ, trỏ đến dữ liệu kiểu chả, và dữ liệu của là hằng số.

Cuối cùng

Quy tắc xoắc ốc giúp ta hiểu ý nghĩa khai báo C/C++ một cách dễ dàng. Bây giờ với quy tắc này, bạn chắc chắn khai báo dưới đây dễ hiểu như ăn kẹo rồi phải không?
void (signal(int, void (fp)(int)))(int);

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
287 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
75 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết 3 năm trước
75 8
White
44 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết hơn 2 năm trước
44 7
White
35 1
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết hơn 2 năm trước
35 1
Bài viết liên quan
White
3 1
Chú ý: Bài viết này trình bày chủ yếu cho CentOS 64 bit, tuy nhiên ý tưởng có thể áp dụng cho các hệ điều hành khác. Cuối bài có ghi chú cho Ubunt...
Ngoc Dao viết hơn 2 năm trước
3 1
White
18 5
Gần đây tôi có dịp đụng vào CMake, nên có tìm hiểu một chút về nó. Hy vọng có ích cho anh em. Nó cung cấp tính năng sinh ra Makefile một cách hiệu...
Phùng Văn Tú viết gần 3 năm trước
18 5
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
287 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!