Announcement

Collapse
No announcement yet.

con trỏ trong C phần 2 - và các phần tiếp theo

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

  • 10520195
    replied
    Originally posted by 11520327 View Post
    vậy 2 hàm anh đưa ra giải thích sao đây?
    Đơn giản chỉ là con trỏ trỏ đến con trỏ. Thông thường khi bạn muốn thay đổi giá trị của một biến nào đó thông qua một hàm thì bạn truyền địa chỉ của biến đó vào danh sách đối số của hàm, giờ bạn muốn thay đổi con trỏ thì truyền địa chỉ của con trỏ đó vào

    Leave a comment:


  • 10520191
    replied
    Code đầu:
    void Tag(int *a)
    {
    a=new int();
    };
    -> cấp phát như vậy tức là cấp phát cho biến con trỏ cục bộ (chứ ko phải cấp phát cho biến truyền vào), ra khỏi hàm biến con trỏ cục bộ bị hủy. Thế nên biến truyền vào chưa đc cấp phát :happy:
    Code sau: cấp phát như mình, tức là cấp phát cho chính vùng nhớ của con trỏ truyền vào. Thế nên ra khỏi hàm con trỏ truyền vào có giá trị (tức là vùng nhớ mới đc cấp phát).

    Leave a comment:


  • 11520327
    replied
    vậy 2 hàm anh đưa ra giải thích sao đây?

    Leave a comment:


  • 10520195
    replied
    Originally posted by 11520327 View Post
    phần tiếp theo của bài viết " con trỏ trong C".
    đoạn code:
    PHP Code:
    #include<stdio.h>
    #include<conio.h>

    void Tag(int *a)
    {
        
    a=new int();
    };
    int main()
    {
        
    int *p=NULL;
        
    Tag(p);
        *
    p=6;

        
    printf("%d", *p);
        
    getch();
        return 
    0;

    hỏi: khi chạy chương trình thì kết quả như thế nào, giải thích tại sao có kết quả như vậy và đưa ra giải pháp nếu có.
    xin các bạn lưu ý là mình chỉ thảo luận về con trỏ, những nội dung khác không liên quan đến phần này, xin viết ở topic khác.
    Chương trình của bạn bị lỗi.
    Nếu kiểu của đối số và kiểu của tham số truyển vào khi gọi hàm là giống nhau thì bạn đã truyển tham trị chứ không phải truyền tham chiếu, ở đây khi bạn gọi hàm Tag(p) tức là bạn đã truyền tham trị, những gì thực hiện trong hàm Tag sẽ không ảnh hưởng gì đến p, do đó khi thực hiện đến lệnh tiếp theo là *p=6 sẽ bị báo lỗi.

    Leave a comment:


  • 11520327
    replied
    void Tag(int **a)
    {
    (*a) = new int();
    }
    nếu bạn viết hàm như thế này thì phải sửa lại cách gọi hàm Tag(&p) trong hàm main.
    void Tag(int* &a)
    {
    a = new int();
    }
    hàm này viết đơn giản hơn hàm trên, hiệu quả tương tự.
    phần giải thích đâu a? tại sao đoạn code đầu sai, tại sao 2 giải pháp trên đúng?
    Last edited by 11520327; 04-10-2012, 10:32.

    Leave a comment:


  • 10520191
    replied
    Theo mình chương trình nay lỗi.
    Muốn in ra giá trị 6, thì phỉa ntn:
    void Tag(int **a)
    {
    (*a) = new int();
    }
    or
    void Tag(int* &a)
    {
    a = new int();
    }

    Leave a comment:


  • con trỏ trong C phần 2 - và các phần tiếp theo

    phần tiếp theo của bài viết " con trỏ trong C".
    đoạn code:
    PHP Code:
    #include<stdio.h>
    #include<conio.h>

    void Tag(int *a)
    {
        
    a=new int();
    };
    int main()
    {
        
    int *p=NULL;
        
    Tag(p);
        *
    p=6;

        
    printf("%d", *p);
        
    getch();
        return 
    0;

    hỏi: khi chạy chương trình thì kết quả như thế nào, giải thích tại sao có kết quả như vậy và đưa ra giải pháp nếu có.
    xin các bạn lưu ý là mình chỉ thảo luận về con trỏ, những nội dung khác không liên quan đến phần này, xin viết ở topic khác.
    Last edited by 11520327; 06-10-2012, 09:01.

LHQC

Collapse
Working...
X