Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 27 kết quả

Đề tài: Con trỏ trên C như thế nào? Công dụng, tác dụng của con trỏ trên C???

  1. #1
    No Avatar
    NothingToLost Khách

    Mặc định Con trỏ trên C như thế nào? Công dụng, tác dụng của con trỏ trên C???

    Em nghe nói ở trong C người ta dùng nhiều về Pointer hơn ở trong Pascal. Có bác nào giảng hộ em về Pointer được ko, em đọc sách mà chẳng hiểu gì cả (Chắc tại ngu wá!!!)
    -thanks-

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,749

    Trong pascal con trỏ thực sự không mấy khi dùng. Nhưng trong C con trỏ nó cực kỳ mạnh mẽ, và nó còn là một nét đặc trưng của C trong khi làm việc với mảng hay cấp phát động...
    Để hiểu được con trỏ anh cần phải biết một số kiến thức về vi xử lý, hệ điều hành, và bộ nhớ.... Nhưng để đơn giản em xin lấy ví dụ thế này.

    Ví dụ có hàng tỷ cái chai, đặt trên một băng có thứ tự từ 1 tới 1 tỷ.
    Bây giờ anh lấy một cái chai và dán một cái nhãn cho nó chẳng hạn là 'Cam'
    Sau đó anh lại đổ vào chai đó 2 lít nước cam
    Cái hành động dán nhãn có thể ví như việc anh khai báo biến, còn việc anh đổ 2 lít nước cam vào chai chính có thể coi như là anh gán cho biến một giá trị là 2.
    Có thể nó như thế này đây:
    int cam;
    cam=2;
    Vậy con trỏ là như thế nào?
    Ví dụ chai ta vừa lấy nó nằm vào vị trí 6590 chẳng hạn. Vậy 6590 chính là con trỏ cam, và ta có thể biết được chai cam chứa bao nhêu cam qua vị trí của nó (tức con trỏ)
    Có lẽ là nó như thế này đây
    int *pcam;
    pcam=&cam;
    Như vậy Nếu như in ra ta sẽ nhận được như sau : pcam=6590 và *pcam=2.

    Sau đây là một ví dụ nhé
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    clrscr();
    int cam,y;
    int *pcam;
          
    cam=2;
          
    pcam=&cam;
          
    y=*pcam+1;
        
    printf("cam= %u",cam);
        
    printf("\npcam= %u",pcam);
        
    printf("\n*pcam= %u",*pcam);
        
    printf("\ny= %u",y);
     
    getch();
     } 
    Các anh bổ sung thêm nhé!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Trong pascal con trỏ có thể cho trỏ đên 1 địa chỉ bất kì do mình quyết định, nhưng trong VC++ làm sao cho nó trỏ đên 1 địa chỉ bất kì dc.

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    6

    - Biến con trỏ là loại biến chuyên dùng để chứa địa chỉ của biến động, giúp ta truy nhập đến biến động.
    - Vậy thì biến động là gì :
    + Biến động là biến không được sinh ra lúc bắt đầu chương trình mà sinh ra trong quá trình thực hiện chương trình.
    + Biến động là loại biến có thể thay đổi được kích thước, vùng nhớ và địa chỉ của vùng nhớ được cấp phát lúc chạy chương trình.
    + Có thể giải phóng biến động sau khi đã sử dụng để tiết kiệm bộ nhớ.
    - Thế nhưng biến động cũng có nhược điểm là không thể truy nhập đến nó được bởi vì biến động không chứa địa chỉ nhất định. Để khắc phục nhực điểm này người ta sử dụng một loại biến đặc biệt là biến con trỏ (pointer)

    Cách khai báo biến con trỏ :
    Code:
    <Kiểu dữ liệu> *<Tên con trỏ>;
    Ví dụ :
    Code:
    int *px;
    float * c;
    Chúc vui ! %

  5. #5
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,749

    Con trỏ thực chất là một biến.
    ví dụ anh khai báo
    int *pcam;
    Thì *pcam chính là một biến đó, nhưng nó có dấu hoa thị (*) phía trước thì nó là biến con trỏ.
    Một khi là một biến thì anh hoàn toàn có thể gán cho nó một giá trị bất kỳ.
    Thí dụ
    *pcam=4985;

    Nhưng đối với một con trỏ ta luôn có thể lấy ra được 2 giá trị, còn biến bình thường chỉ có một giá trị.
    Trong trường hợp này ta xét ví dụ sau nhé
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    clrscr();
    int y;
    int *pcam;
        *
    pcam=4985;
        
    y=*pcam+1;
        
    printf("\npcam= %u",pcam);
        
    printf("\n*pcam= %u",*pcam);
        
    printf("\ny= %u",y);
     
    getch();
     return 
    0;
     } 
    Anh chạy thử và sử dụng một chút tư duy có thể hiểu ngay em muốn nói gì rồi. Chúc thành công!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Mặc định Con trỏ trên C như thế nào? Công dụng, tác dụng của con trỏ trên C???

    Trả lời câu hỏi của em đi chứ

  7. #7
    Ngày gia nhập
    07 2006
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi hoanglinh9466
    Trong pascal con trỏ có thể cho trỏ đên 1 địa chỉ bất kì do mình quyết định, nhưng trong VC++ làm sao cho nó trỏ đên 1 địa chỉ bất kì dc.
    Muốn trỏ đến 1 địa chỉ bất kỳ nào đó thì bạn dùng toán tử gán (=) để gán địa chỉ cho biến con trỏ.
    Ví dụ :
    Code:
    (1)  int a, *p, *q;
    (2)  p = &a;
    (3)  q = p;
    Giải thích :
    (2) : gán địa chĩ của biến a cho con trỏ p;
    (3) : gán giá trị của p cho q (như vậy thì con trỏ q cũng chứa địa chỉ của biến a)

    Chúc vui !

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Ko phải vậy, ví dụ trong pascal có hàm ptr(địa chỉ), vậy trong VC làm sao cho nó trỏ đến 1 địa chỉ bất kì như 0x0000000,0xac4323...cơ

  9. #9
    No Avatar
    noname.cpp Khách

    Thì cứ gán nó trực tiếp vào con trỏ chứ sao.
    Nhưng đừng bao giờ gán kiểu này vì như thế có thể làm cho con trỏ trỏ đến vùng nhớ chưa được cấp phát ,trong VC khi truy cập đến vùng nhớ chưa được cấp phát thì sẽ gặp lỗi runtime.
    Chỉ nên gán địa chỉ cho con trỏ thông qua các hàm cấp phát bộ nhớ như new ,malloc.

  10. #10
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    cứ gán kiểu này đi:
    int *p;
    p = 123; //123 là ô nhớ của hệ thống, hoặc ô nhớ share giữa các process, cần gì cấp phát.
    Nếu hệ thống cho phép bạn thay đổi thì bạn có thể thay đổi, nếu không thì chỉ đọc thôi

Các đề tài tương tự

  1. ADO.NET làm thế nào để scrollbar trên gridview (devexpress) tự động cuộn xuống bản ghi cuối trên gridview
    Gửi bởi hung_3805 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 20-11-2013, 05:10 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Combobox trên C# | Khóa không cho nhập vào combobox trên C# như thế nào?
    Gửi bởi vanan3103 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 15-08-2011, 04:22 PM
  4. Lỗi gì đó liên quan tới DOS ảo trên win, không tìm thấy thông tin trên GOOGLE
    Gửi bởi longtth trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 20-12-2009, 12:03 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn