Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc về thay đổi giá trị của con trỏ thông qua hàm???????

    Mã:
    #include<stdio.h>
    #include<conio.h>
    void vidu(int **p)
    {
         int b = 11;
         *p = &b;
     }
    void main()
    {
          int a = 5;
          int *p;
          p = &a;
          printf("a(truoc khi goi ham)=%d
    ",*p);
          vidu(&p);
          printf("a(sau khi goi ham)=%d",*p);
          getch();
          
      }
    Mình đã dùng đối là con trỏ trỏ đến con trỏ để thay đổi giá trị của con trỏ trong hàm main nhưng có thắc mắc là mình đã cho con trỏ trỏ đến biến b trong hàm vidu nhưng khi thoát khỏi hàm vidu thì biến b bị giải phóng thì làm sao trong hàm main con trỏ có thể trỏ đế b được ạ? mà code trên là in ra giá trị của biến b là 11.
    Vậy việc giải phóng biến trong hàm có ý nghĩa như thế nào và được hình dung như thế nào?????

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    p không trỏ đến b, mà nó trỏ đến địa chỉ của b. Sau khi hàm vidu kết thúc, b được giải phóng, nhưng địa chỉ của nó thì vẫn còn đó.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn thử cái này thì hiểu ngay:

    Mã:
    void vidu(int **p)
    {
       int b = 11;
       *p = &b;
    }
    
    void vidu2()
    {
       int c = 13;
    }
     
    int main(int argc, char *argv[])
    {
       int a = 5;
       int *p;
       p = &a;
       printf("a(truoc khi goi ham)=%d
    ",*p);
       vidu(&p);
       vidu2();
       printf("a(sau khi goi ham)=%d
    ",*p);
    }

  4. #4
    Thank các bạn. Cho mình hỏi luôn là tên biến có phải hình dung như là tên của vùng nhớ nào đó để chúng ta có thể thao tác trên code ví dụ như là gán giá trị,cộng trừ nhân chia, lấy địa chỉ...còn khi giải phóng là cái biến đó mất đi kiểu như xóa cái tên biến đi còn địa chỉ và giá trị của biến đó vẫn còn đúng không???Mình vẫn k hình dung được chỗ này hihi

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Ý đầu thì đúng.
    Ý sau thì như bạn đã nói thì biến cũng chỉ là đặt ra nên ngay sau đó thì vẫn đúng.

    (Lưu ý C/C++ chỉ có cấp vùng nhớ thôi)

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Ý đầu thì đúng.
    Ý sau thì như bạn đã nói thì biến cũng chỉ là đặt ra nên ngay sau đó thì vẫn đúng.

    (Lưu ý C/C++ chỉ có cấp vùng nhớ thôi)
    Thank mình hiểu rồi [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •