Announcement

Collapse
No announcement yet.

Hằng trong C

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hằng trong C

    Code:
    int count = 20;
    Anh chị cho em hỏi biến count ở trên là hằng hay là biến được gán giá trị vậy ạ, em đọc sách thấy sách ghi là hằng thường, nhưng biến được gán giá trị cũng giống vậy mà :amazed:

  • #2
    Cái này là biến bạn ạ. Thật ra thì biến mà bạn khai báo và không bao giờ đổi giá trị thì nó là hằng thôi. Người ta đặt ra định nghĩa hằng để mà tránh trường hợp bạn vô tình sử dụng hằng như biến thôi. Tại một chương trình quá dài mà bạn đặt rất nhiều biến (mang ý nghĩa như hằng) thì một đoạn code nào đó lại vô tình làm thay đổi nó mà Compiler ko bao giờ báo lỗi.

    Comment


    • #3
      như thế này là hằng bạn ạ : #define count 20 hoặc const int count =20;

      Comment


      • #4
        Originally posted by 11520592 View Post
        Cái này là biến bạn ạ. Thật ra thì biến mà bạn khai báo và không bao giờ đổi giá trị thì nó là hằng thôi. Người ta đặt ra định nghĩa hằng để mà tránh trường hợp bạn vô tình sử dụng hằng như biến thôi. Tại một chương trình quá dài mà bạn đặt rất nhiều biến (mang ý nghĩa như hằng) thì một đoạn code nào đó lại vô tình làm thay đổi nó mà Compiler ko bao giờ báo lỗi.
        em hiểu rồi, đúng là nếu gặp chương trình lớn mà lỡ thay đổi 1 hằng kiểu này là khó mà thấy được

        Comment


        • #5
          Originally posted by 11520592 View Post
          Cái này là biến bạn ạ. Thật ra thì biến mà bạn khai báo và không bao giờ đổi giá trị thì nó là hằng thôi. Người ta đặt ra định nghĩa hằng để mà tránh trường hợp bạn vô tình sử dụng hằng như biến thôi. Tại một chương trình quá dài mà bạn đặt rất nhiều biến (mang ý nghĩa như hằng) thì một đoạn code nào đó lại vô tình làm thay đổi nó mà Compiler ko bao giờ báo lỗi.
          Nói vậy không hẳn là đúng nhé. Một trong những mục đích của việc sử dụng hằng là để cho code dễ đọc.

          Ví dụ:

          Code:
          hằng CON_DÊ = 35
          
          message "Tối qua mơ thấy con dê, xuống xác đi bây ơi!"
          
          biến lô_đề = CON_DÊ
          Dễ đọc chưa nào :love:


          Code:
          hằng PI = 3.14
          
          biến bán_kính = 1
          
          biến dt_hình_tròn = bán_kính ^ 2 * PI
          
          biến cv_hình_tròn = 2 * bán_kính * PI
          Chú ý rằng PI tham gia 2 lần vào biểu thức tính toán của chúng ta, nếu các bạn sau này muốn con số PI của mình chính xác hơn (ví dụ 3.14%$&$%$^*^&*^&*#$^#&%^&#%&#%&*$^&*) thì các bạn chỉ cần sửa ngay dòng code đầu tiên.

          Nói chung suy nghĩ vẩn vơ cho lắm vào thì rốt cuộc hằng trong ngôn ngữ lập trình cũng tương tự như hằng ở ngoài đời thôi, mục đích của nó chỉ là đóng vai trò hằng. Xong!

          À sorry chủ topic mình hơi bị OT :nosebleed:
          Last edited by 10520040; 27-08-2013, 10:06.

          Comment


          • #6
            Cũng đúng mà anh. Tại giả sử như em không dùng hằng em dùng biến em đặt tên nó là PI là Con_Dê vẫn được. Nó sử dụng y như hằng, nó cũng chỉ gán giá trị từ ban đầu. Như vậy nếu mà mục đích code dễ nhìn thì vẫn chỉ cần biến. Biến cũng là biểu thị cho một dữ liệu bằng một cái tên nó y đúc như hằng
            Ví dụ:
            float PI = 3.14; //PI không bao giờ mình đụng tới trong chương trình

            biến bán_kính = 1

            biến dt_hình_tròn = bán_kính ^ 2 * PI

            biến cv_hình_tròn = 2 * bán_kính * PI

            Comment


            • #7
              Originally posted by 11520592 View Post
              Cũng đúng mà anh. Tại giả sử như em không dùng hằng em dùng biến em đặt tên nó là PI là Con_Dê vẫn được. Nó sử dụng y như hằng, nó cũng chỉ gán giá trị từ ban đầu. Như vậy nếu mà mục đích code dễ nhìn thì vẫn chỉ cần biến. Biến cũng là biểu thị cho một dữ liệu bằng một cái tên nó y đúc như hằng
              Ví dụ:
              float PI = 3.14; //PI không bao giờ mình đụng tới trong chương trình

              biến bán_kính = 1

              biến dt_hình_tròn = bán_kính ^ 2 * PI

              biến cv_hình_tròn = 2 * bán_kính * PI
              Thì anh có bảo là em sai đâu nè, chỉ là phát biểu đó thiên về hướng kĩ thuật và hơi khô khan, không nói lên được bản chất vấn đề.:byebye:

              Tính chất "chỉ dùng một lần" đâu phải chỉ mỗi hằng là có. Tại sao người ta không đặt cho một cái tên khác gần guĩ hơn, như ... ba con sói chẳng hạn :smile:

              Người ta đưa hằng vào ngôn ngữ lập trình để cung cấp một phương tiện cho phép nhà lập trình cá nhân hóa một giá trị gì đó có ý nghĩa đặc biệt với anh ta. Điều này ko thể làm được với biến vì tính chất thay đổi giá trị liên tục của nó.

              Comment


              • #8
                [MENTION=7604]10520040[/MENTION]: phát biểu dưới góc high-end progamming. Việc hiểu kiểu này cũng đúng một phần nhưng mấu chốt của hằng là tính "chỉ được gán một lần" (thay vì "dùng một lần" của [MENTION=12777]11520592[/MENTION]). Do đó bản chất của hằng cũng liên quan đến việc không thể gán nếu nó đã nhận giá trị lần đầu rồi.
                - Các biến read-only, hằng được lưu ở vùng nhớ riêng điều này có thể có lợi cho chương trình đối với việc tối ưu tốc độ truy xuất và xử lý.
                - Chỉ thị tiền xử lý #define hay const còn là đánh dấu cho trình biên dịch biết nó sẽ sử dụng các giá trị này, giả sử như bạn có một giá trị immutable là một chuỗi
                Code:
                    char* a = "hello uit"; // (1)
                chuyện gì xảy ra nếu bạn cố gắng thay đổi chuỗi này?
                Code:
                    a[1] = 's';
                với khai báo (1) trình biên dịch sẽ bỏ qua, chương trình có lỗi run-time mà không biết là bị gì?
                Thay đổi (1) thành
                Code:
                    const char* a = "hello uit"; // (2)
                khi bạn biên dịch (gcc) sẽ hiển thị error msg ngay.
                => Điều này rõ ràng có ý nghĩa rất lớn khi sử dụng các third-party API, sẽ ra sao nếu bạn chỉ có được interface mà không biết một function của library đó implemented như thế nào?
                Một chương trình với hàng ngàn thậm chí chục ngàn dòng code thì việc đảm bảo một biến là không đổi rõ ràng là rất khó.
                - Một hàm có arg được khai báo như một hằng
                Code:
                    function(const &)
                sẽ không phải tạo một copy của variable vừa đảm bảo rằng param truyền vào sẽ không bị thay đổi trong suốt hàm đó (trong trường hợp muốn truyền vào một tham chiếu nhưng lại sợ giá trị biến sau khi kết thúc hàm bị thay đổi).

                Hằng số xét cho cùng phục vụ cho mục đích tối ưu compiler, tối ưu bộ nhớ và tốc độ chương trình (dĩ nhiên là phải sử dụng thích hợp, biến nào cũng là hằng thì không biết lập trình sao luôn). Còn các mục đích khác thì chắc còn lởn vởn đâu đó, mình chưa tìm ra?
                Last edited by 08520021; 27-08-2013, 17:43. Reason: typo

                Comment

                LHQC

                Collapse
                Working...
                X