Announcement

Collapse
No announcement yet.

con trỏ trong C

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

  • con trỏ trong C

    như các bạn đã biết con trỏ là 1 vấn đề khá là khó trong C, có liên quan đến các môn học như tin đại cương, cấu trúc dữ liệu và giải thuật, OOP,... chính vì vậy mình đưa ra chủ đề này với mong muốn trao đổi các vấn đề của con trỏ. hi vọng mọi người cùng tham gia để củng cố kiến thức. có 1 chú ý nho nhỏ là các bạn nên viết code bằng mã C vì như vậy tạo điều kiện cho K7 dễ dàng tìm hiểu
    mình xin bắt đầu bằng 1 đoạn code:
    PHP Code:
    void Tag(int *a)
    {
        *
    a=5;
    }
    int main()
    {    
        
    int numb=3;
        
    Tag(&numb);
        
    printf("gia tri cua numb: %d"numb);
        
    getch();

    câu hỏi: kết quả của đoạn code trên và giải thích tại sao lại có kết quả như vậy?
    Last edited by 11520327; 03-10-2012, 23:31.

  • #2
    Originally posted by 11520327 View Post
    như các bạn đã biết con trỏ là 1 vấn đề khá là khó trong C, có liên quan đến các môn học như tin đại cương, cấu trúc dữ liệu và giải thuật, OOP,... chính vì vậy mình đưa ra chủ đề này với mong muốn trao đổi các vấn đề của con trỏ. hi vọng mọi người cùng tham gia để củng cố kiến thức. có 1 chú ý nho nhỏ là các bạn nên viết code bằng mã C vì như vậy tạo điều kiện cho K7 dễ dàng tìm hiểu
    mình xin bắt đầu bằng 1 đoạn code:
    PHP Code:
    void Tag(int *a)
    {
        *
    a=5;
    }
    int main()
    {    
        
    int numb=3;
        
    Tag(&numb);
        
    printf("gia tri cua numb: %d"numb);
        
    getch();

    câu hỏi: kết quả của đoạn code trên và giải thích tại sao lại có kết quả như vậy?
    lỗi chả ra gì cả
    Be different and always different
    http://archlinuxvn.org/
    http://theslinux.org
    http://lab.infosec.xyz

    Comment


    • #3
      Originally posted by 10520058 View Post
      lỗi chả ra gì cả
      Ra kết quả bình thường ?

      Comment


      • #4
        Originally posted by 10520541 View Post
        Ra kết quả bình thường ?

        cho em xin cái chương trình với

        Comment


        • #5
          đoạn mã tren có include cái gì đâu mà ra chú :]]
          Be different and always different
          http://archlinuxvn.org/
          http://theslinux.org
          http://lab.infosec.xyz

          Comment


          • #6
            Originally posted by 12520814 View Post
            cho em xin cái chương trình với
            Copy - Paste zô thôi mà :adore:
            Chạy bằng Ctrl+F5 nhé, tại bỏ getch() rồi.
            Attached Files

            Comment


            • #7
              hiện tại em vài visual 2012 rồi mà chẳng biết làm gì nữa. lập trình c++ mình làm trên visual đó lun hở a?

              Comment


              • #8
                Originally posted by 12520814 View Post
                hiện tại em vài visual 2012 rồi mà chẳng biết làm gì nữa. lập trình c++ mình làm trên visual đó lun hở a?
                Um.
                Mấy ngôn ngữ như C, C++, C# ở UIT thực hành trên Visual Studio 2005, 2008 hoặc 2010 (tuỳ mấy cái máy ở phòng Lab)

                Comment


                • #9
                  Originally posted by 10520541 View Post
                  Um.
                  Mấy ngôn ngữ như C, C++, C# ở UIT thực hành trên Visual Studio 2005, 2008 hoặc 2010 (tuỳ mấy cái máy ở phòng Lab)
                  chà vậy hơi căng e dùng bản 2012 không biết nó có khác gì lắm ko nữa. khác quá chắc phải cài lại

                  Comment


                  • #10
                    Originally posted by 12520814 View Post
                    chà vậy hơi căng e dùng bản 2012 không biết nó có khác gì lắm ko nữa. khác quá chắc phải cài lại
                    Không rõ.
                    VS 2010 với 2012 chắc không thành vấn đề đâu

                    Comment


                    • #11
                      Originally posted by 10520541 View Post
                      Không rõ.
                      VS 2010 với 2012 chắc không thành vấn đề đâu
                      hj nếu vậy phải bắt đầu vọc phá thôi

                      Comment


                      • #12
                        Originally posted by 12520814 View Post
                        chà vậy hơi căng e dùng bản 2012 không biết nó có khác gì lắm ko nữa. khác quá chắc phải cài lại
                        Lập trình theo đúng chuẩn quy ước của ngôn ngữ C thì IDE nào cũng có thể chạy được. Nếu em viết code chỉ chạy được trên máy phòng lab và đem đi chỗ khác chạy không được thì đó cũng không phải tốt.

                        Comment


                        • #13
                          Originally posted by 11520327 View Post
                          như các bạn đã biết con trỏ là 1 vấn đề khá là khó trong C, có liên quan đến các môn học như tin đại cương, cấu trúc dữ liệu và giải thuật, OOP,... chính vì vậy mình đưa ra chủ đề này với mong muốn trao đổi các vấn đề của con trỏ. hi vọng mọi người cùng tham gia để củng cố kiến thức. có 1 chú ý nho nhỏ là các bạn nên viết code bằng mã C vì như vậy tạo điều kiện cho K7 dễ dàng tìm hiểu
                          mình xin bắt đầu bằng 1 đoạn code:
                          PHP Code:
                          void Tag(int *a)
                          {
                              *
                          a=5;
                          }
                          int main()
                          {    
                              
                          int numb=3;
                              
                          Tag(&numb);
                              
                          printf("gia tri cua numb: %d"numb);
                              
                          getch();

                          câu hỏi: kết quả của đoạn code trên và giải thích tại sao lại có kết quả như vậy?
                          KQ ra 5 vì:
                          Khi gọi hàm Tag(&numb), chúng ta sẽ đưa tham trị là địa chỉ của biến numb. Do đó a trỏ đến numb, khi đó *a là tên gọi khác của numb. Thế nên các thao tác với biến *a tức là thao tác với biến numb. Dùng con trỏ như thế này thì chúng ta biết được địa chỉ thực của numb, do đó nên tác động được vào giá trị của biến này.

                          Không biết có gì sai sót không ? Mong mọi người góp ý :sogood:
                          “ Đơm hoa không kết trái thì có sao?

                          Là cá thì nhất định phải bơi ư?

                          Ai bảo cuộc đời là phải sống,
                          Ai bảo đau khổ rồi cũng sẽ qua,
                          Ai bảo bài hát là phải có dạo đầu,

                          Phá vỡ ranh giới để tìm kiếm điều gì đó...”

                          Comment


                          • #14
                            Originally posted by 11520327 View Post
                            PHP Code:
                            void Tag(int *a)
                            {
                                *
                            a=5;
                            }
                            int main()
                            {    
                                
                            int numb=3;
                                
                            Tag(&numb);
                                
                            printf("gia tri cua numb: %d"numb);
                                
                            getch();

                            câu hỏi: kết quả của đoạn code trên và giải thích tại sao lại có kết quả như vậy?
                            Thư giãn tí
                            - Như đã biết chươg trình bắt đầu chạy từ dòng đầu tiên trong hàm main() cho ra numb nhận giá trị là 3.
                            - Tiếp đó là dòng gọi hàm Tag. Địa chỉ của numb sẽ dc gán cho con trỏ a => a trỏ tới numb => gán cho numb giá trị là 5 // Dòng này hok biết nói ra sao :unhappy:
                            - In ra giá trị của numb = 5

                            ACE góp ý tiếp nhé.

                            Comment


                            • #15
                              KQ ra 5 vì:
                              Khi gọi hàm Tag(&numb), chúng ta sẽ đưa tham trị là địa chỉ của biến numb. Do đó a trỏ đến numb, khi đó *a là tên gọi khác của numb. Thế nên các thao tác với biến *a tức là thao tác với biến numb. Dùng con trỏ như thế này thì chúng ta biết được địa chỉ thực của numb, do đó nên tác động được vào giá trị của biến này.
                              bạn 11520527trả lời đúng rùi đấy. khi truyền bằng tham trị thì trình biên dịch sẽ tự động tạo ra 1 bản sao của đối số đưa vào. ở đây đối số truyền vào là &numb, trình biên dịch sẽ tạo ra a là bản sao của &numb và kết quả là a sẽ trỏ đến numb. *a và numb có thể hiểu đó là 1, cho nên mọi thao tác trên *a đều tác động đến numb.

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X