Announcement

Collapse
No announcement yet.

Giúp em sáng tỏ 2 vấn đề này với! (chuỗi trong C)

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

  • #16
    Tóm lại là thế này:

    PHP Code:
    char p[] 
    tương đương với
    PHP Code:
    char* const 
    Chữ const đó chứng tỏ nó là một hằng số và hằng số không thể đưa vào toán tử ++

    Khi tiến hành char * const p = "hello world" thì chữ hello world được nằm trong một vùng nhớ riêng (mình chả biết nó tên gì, mà tên cũng không quan trọng, Tuấn Anh nó nói rồi) vùng nhớ này chứa các giá trị được ghi thẳng vào trong file code lúc lập trình. Nó được được nạp vào một chỗ riêng biệt trong bộ nhớ, gọi là vị trí X đi chẳng hạn. Và chương trình không được phép truy xuất vào vùng X này. Dĩ nhiên có thể có biện pháp hay cơ chế đặc biệt nào đấy nhưng mình không quan tâm, chưa bao giờ có nhu cầu làm việc kỳ quặc đó.

    Khi thực hiện gán bằng thì với biến kiểu con trỏ C chỉ chép phần địa chỉ của vùng nhớ tức là p bây giờ mang giá trị X và các thao tác thay đổi giá trị của vùng nhớ X sẽ dẫn đến lỗi "segmentation fault".
    Nhưng nếu p khai báo là mảng thì C hiểu ta muốn khởi tạo mảng nên nó sẽ tạo một vùng nhớ khác ở vị trí Y, copy chữ hello world từ chỗ X vào Y và cho p mang giá trị Y.

    Comment


    • #17
      char*p = "dsds";
      p++;
      vẫn ok mà a?

      Comment


      • #18
        Originally posted by lytieulong_269 View Post
        char*p = "dsds";
        p++;
        vẫn ok mà a?
        thì anh có nói nó sai bao giờ?

        Im a british accent lover

        Comment


        • #19
          uk, thì anh nói đúng mà! Em hiểu hết ~ gì anh nói rồi Nhưng có một bạn khác lại giải thích ntn với em?
          char *p // Bản thân nó là 1 con trỏ rất linh động. Nhưng:
          p="Blah blah..." ;// Đây chính là phép gán "Định mệnh". Con trỏ nó sẽ thành char const *. (một con trỏ hằng) Tức là giá trị các phần tử hiện tại của nó ko dc phép thay đổi. , nhưng có thể cho p trỏ đi chỗ khác, tức là thay đổi dc địa chỉ
          char p[]; Là một const char * . Tức là hằng con trỏ, ko thể nào thay đổi dc địa chỉ của nó nhưng có khả năng thay đổi dc giá trị các phần tử

          hơ, vậy em nên hiểu theo chiều hướng nào??

          Comment


          • #20
            Originally posted by lytieulong_269 View Post
            char p[]; Là một const char * . Tức là hằng con trỏ, ko thể nào thay đổi dc địa chỉ của nó nhưng có khả năng thay đổi dc giá trị các phần tử
            Sai rồi

            char p[] là một
            PHP Code:
            char* const 
            như post của admin đã nói đấy. Bản thân con trỏ là hằng nhưng vùng nhớ nó trỏ đến thì không, post của admin nói rồi đó.

            còn trường hợp bạn em nói là
            PHP Code:
            const char*
            lúc này vùng nhớ trỏ tới là hằng, bản thân con trỏ thì không! Cái này chưa đề cập đến trong post nè.

            Còn trường hợp char *p = "blah blah" thì lúc này con trỏ đang trỏ đến một vùng nhớ mà chương trình không được quyền thay đổi!, post của admin cũng nói rồi đó.

            Tóm cái váy bó cái gọn lại là em đọc nhiều sách và test từng trường hợp để rút ra kết luận. Học đại học phải học từ NHIỀU GIÁO TRÌNH và thực hành thật nhiều.
            Last edited by 07520004; 02-12-2011, 03:49.

            Comment


            • #21
              Cuối cùng em cũng đã hiểu được vấn đề một cách thật chi tiết! Cho em gửi lời cảm ơn sự nhiệt tình của tất cả các anh trong forum đã quan tâm đến topic này.

              Comment


              • #22
                char *p; là gì em chưa hiểu.linh động là linh động thế nào?
                visit me at solitarywolf-it.blogspot.com

                Comment


                • #23
                  Originally posted by 11520056 View Post
                  char *p; là gì em chưa hiểu.linh động là linh động thế nào?
                  đọc kĩ các Post trên chưa? mà cái này trong sách cũng có nói mà
                  -----------------------------
                  Mai Văn Khải
                  Software Engineering, University Information of Technology
                  a07d26eb5cbc98f77b36a461eb629456

                  Comment


                  • #24
                    Originally posted by 11520056 View Post
                    char *p; là gì em chưa hiểu.linh động là linh động thế nào?
                    char *p <==> char p[]
                    Một khẩu súng giữ hai trời Nam Bắc,
                    Một dấu chân in màu đất hai miền.

                    ------------------------------------------------------

                    Comment


                    • #25
                      Originally posted by 08520229 View Post
                      char *p <==> char p[]
                      ----> điều này là xấp xỉ đúng thôi a ak

                      Comment


                      • #26
                        Originally posted by 08520229 View Post
                        char *p <==> char p[]
                        Bác có theo dõi topic không thế, 2 cao thủ đã giải thích rõ là không tương đương mà, bác đừng em chủ topic bị lung lay.

                        Comment


                        • #27
                          Originally posted by 08520521 View Post
                          Bác có theo dõi topic không thế, 2 cao thủ đã giải thích rõ là không tương đương mà, bác đừng em chủ topic bị lung lay.
                          thì cách hoạt động của hai chú này giống nhau mà bản chất của mảng trong C/C++ cũng chỉ là con trỏ... Xin lỗi ko đọc page 2, các cao thủ giải thích rõ rồi --> té đây
                          Một khẩu súng giữ hai trời Nam Bắc,
                          Một dấu chân in màu đất hai miền.

                          ------------------------------------------------------

                          Comment

                          LHQC

                          Collapse
                          Working...
                          X