Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Một số thắc mắc về con trỏ

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    24

    Mặc định Một số thắc mắc về con trỏ

    Xin giải thích giùm một số thắc mắc sau đây về con trỏ;
    int **a; nghĩa là gì?có phải là con trỏ trỏ tới con trỏ ko.Nhưng tui muốn giải thích dùm cái mô mình làm việc của nó như thế nào...Ý nghĩa của nó là như thế nào?
    Thank

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    C++ Code:
    1. #include <iostream>
    2.  
    3. int main(){
    4.  
    5.   std::cout << "TAO VUNG NHO DONG\n";
    6.   int **ptr_to_ptr = new int*[5];
    7.   for(int x = 0; x < 5; ++x){
    8.     ptr_to_ptr[x] = new int[5];
    9.   }
    10.  
    11.   for(int x = 0; x < 5; ++x){
    12.     for(int y = 0; y < 5; ++y){
    13.       ptr_to_ptr[x][y] = 7;
    14.     }
    15.   }
    16.  
    17.   for(int x = 0; x < 5; ++x){
    18.     for(int y = 0; y < 5; ++y){
    19.       std::cout << ptr_to_ptr[x][y] << ' ';
    20.     }
    21.     std::cout << '\n';
    22.   }
    23.  
    24.   std::cout << "\nXOA VUNG NHO CAP PHAT!!\n";
    25.    for(int y = 0; y < 5; ++y){
    26.     delete ptr_to_ptr[y];
    27.   }
    28.   delete []ptr_to_ptr;
    29.  
    30.   return 0;
    31. }
    Con trỏ tới con trỏ áp dụng đơn giản nhất là tạo mãng 2 chiều, xem chỗ nào không hiểu thì hỏi, tui sẽ giải thích tiếp

  3. #3
    Ngày gia nhập
    10 2006
    Bài viết
    107

    C++ Code:
    1. // Example for three demension by pointer
    2. // Edited by solokop from source code of r2
    3. #include <iostream.h>
    4. #include <conio.h>
    5.  
    6. const int MAX_DIMENSION_SIZE = 3; // For Test
    7.  
    8. // Entry Point
    9. int main(){
    10.     cout << "TAO VUNG NHO DONG\n";
    11.  
    12.    // First dimension
    13.     int ***ptr_to_ptr = new int**[MAX_DIMENSION_SIZE];
    14.  
    15.    // Second dimension
    16.     for (int x = 0; x < MAX_DIMENSION_SIZE; ++x) {
    17.     ptr_to_ptr[x] = new int*[MAX_DIMENSION_SIZE];
    18.     }
    19.  
    20.    // Three dimension
    21.     for (int x = 0; x < MAX_DIMENSION_SIZE; ++x) {
    22.     for (int y = 0; y < MAX_DIMENSION_SIZE; ++y) {
    23.         ptr_to_ptr[x][y] = new int[MAX_DIMENSION_SIZE];
    24.       }
    25.     }
    26.  
    27.     // Assign value
    28.     for (int x = 0; x < MAX_DIMENSION_SIZE; ++x) {
    29.     for (int y = 0; y < MAX_DIMENSION_SIZE; ++y) {
    30.         for (int z = 0; z < MAX_DIMENSION_SIZE; ++z) {
    31.             ptr_to_ptr[x][y][z] = 0; // For Test
    32.          }
    33.         }
    34.     }
    35.  
    36.    // Show result
    37.     for (int x = 0; x < MAX_DIMENSION_SIZE; ++x) {
    38.     for (int y = 0; y < MAX_DIMENSION_SIZE; ++y) {
    39.         for (int z = 0; z < MAX_DIMENSION_SIZE; ++z) {
    40.                 cout << ptr_to_ptr[x][y][z] << ' ';
    41.          }
    42.             cout << '\n';
    43.         }
    44.         cout << '\n';
    45.     }
    46.  
    47.     cout << "\nXOA VUNG NHO CAP PHAT!!\n";
    48.    for (int y = 0; y < MAX_DIMENSION_SIZE; ++y){
    49.     for (int x = 0; x < MAX_DIMENSION_SIZE; ++x) {
    50.         delete ptr_to_ptr[y][x];
    51.       }
    52.         delete ptr_to_ptr[y];
    53.     }
    54.  
    55.     delete []ptr_to_ptr;
    56.  
    57.     getch();
    58.     return 0;
    59. }

    Có gì không hiểu cứ tự nhiên hỏi rock nha, cậu mod này nhiệt tình lắm .
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Nhưng tui muốn giải thích dùm cái mô mình làm việc của nó như thế nào...Ý nghĩa của nó là như thế nào?
    Ngoài ứng dụng trong mảng 2 chiều như đả nói . Con trỏ " đến con trỏ " còn có tác dụng rất lớn trong việc làm thay đổi địa chỉ của một con trỏ khác khi truyền nó trong hàm . Ví dụ điển hình trong cấu trúc cây hay danh sách liên kết .

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    9

    con trỏ đến con trỏ truyền vào hàm có tác dụng thay đổi nội dung con trỏ (tức cho con trỏ hiện tại trỏ đến địa chỉ khác sau khi ra khỏi hàm)
    một cách tiện lợi cũng không kém là tham chiếu con trỏ ==> có tác dụng tương tự như con trỏ đến con trỏ, khi chúng ta truyền cả 2 vào hàm. Nhưng nhưng tham chiếu con trỏ thì xử lý thì gọn gàng hơn con trỏ đến con trỏ nhiều, nếu không thì C++ bổ sung thêm "tham chiếu" làm gì cho phiền phức. Tuy nhiên cũng có một số hạn chế nếu xét về phía tham chiếu so với con trỏ (tự tìm hiểu nha).
    void fun(int** a, int*& b)
    //a là con trỏ đến con trỏ
    //b là tham chiếu con trỏ

  6. #6
    Ngày gia nhập
    04 2007
    Nơi ở
    Bà Trưng quê ở Mê Linh
    Bài viết
    29

    Mặc định Một số thắc mắc về con trỏ

    Bó tay các Bác đó. Nếu các Bác nhiệt tình seo không trích dẫn (chú giái) luôn sau cậu lệnh lại nói rằng " có j không biết thì hỏi ". Biết như các bác thì nói làm j, đã giúp thì giúp nhiệt tình đi. Làm vậy có bằng thách đố nhau, Biết như các Pác thì hỏi làm j cho mệt.
    >"<

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bó tay các Bác đó. Nếu các Bác nhiệt tình seo không trích dẫn (chú giái) luôn sau cậu lệnh lại nói rằng " có j không biết thì hỏi ". Biết như các bác thì nói làm j, đã giúp thì giúp nhiệt tình đi. Làm vậy có bằng thách đố nhau.
    Nói bóng nói gió ai đó cậu, cậu đòi người ta nhiệt tình cỡ nào, dâng vào miệng cho ăn luôn à ? Hỏi kiểu gì mà đòi người ta giải thích nữa ? Cậu đặt câu hỏi phần nào không hiểu tui sẽ giải thích tới nơi cho cậu, cậu đã đọc sách chưa, đã tìm hiểu chưa mà hỏi, hỏi bừa thì có giải thích cũng như đàn gãi tai trâu !

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Trích dẫn Nguyên bản được gửi bởi khoadangnguyen Xem bài viết
    Xin giải thích giùm một số thắc mắc sau đây về con trỏ;
    int **a; nghĩa là gì?có phải là con trỏ trỏ tới con trỏ ko.Nhưng tui muốn giải thích dùm cái mô mình làm việc của nó như thế nào...Ý nghĩa của nó là như thế nào?
    Thank
    Giải thích đơn giản như thế này.
    Đại chỉ của địa chỉ.
    Bạn đang muốn tìm số điện thoại của 1 cửa hàng.
    Bạn tìm cuốn danh bạ điện thoại.
    Thế thì phải biết danh bạ để ở đâu (con trỏ 1, vị trí danh bạ).
    Sau đó bạn nhìn vào cuốn danh bạ, thì thấy hàng trăm các sdt (con trỏ 2, trỏ đến sdt của hàng).
    Vậy để tìm nhà hàng thì bạn cần đến con trỏ 1, con trỏ 2, ở đây là địa chỉ cuốn danh bạ, sau đó là tra cứu danh bạ và tìm ra sdt nhà hàng.

    Oke, thế đấy.
    Nếu là con trỏ của con trỏ của con trỏ.... thì cũng như thế.
    Thèm khát con gái !!
    ......................

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    9

    C++ Code:
    1. #include <iostream.h>
    2. int main(){
    3.     int a= 5;
    4.     int* pa= &a;
    5.     int** p_pa= &pa;
    6.     cout<< **p_pa<< endl;//5
    7.     cout<< p_pa<< " "<< &pa<< endl;//0x23ff70 0x23ff70
    8.     cout<< pa<< " "<< &a<< endl;//0x23ff74 0x23ff74
    9.     cout<< a<< " "<< **p_pa<< endl;//5 5
    10.     return 0;
    11. }
    ví dụ cụ thể thế này:
    int a= 5;
    int* pa= &a;
    //pa là 1 biến con trỏ, và có nội dung là địa chỉ của biến a (cũng có thế nói là pa trỏ đến a)
    int** p_pa= &pa;
    //p_pa cũng là 1 biến con trỏ, và có nội dung là địa chỉ của biến (con trỏ) pa (hiển nhiên có thể nói là p_pa trỏ đến pa)
    //bây giờ giả sử cần lấy in dung của biến a (tức là số nguyên 5) ra màn hình
    cout<< **p_pa;
    các lệnh cout có thể in ra các địa chỉ khác nhau khi chạy chương trình
    //vậy p_pa có kiểu dữ liệu là gì?
    int** p_pa;//theo câu hỏi của bạn p_pa chính là a
    người đặt câu hỏi nên tìm hiểu thêm.

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