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

Đề tài: Sự khác nhau giữa tham chiếu và con trỏ ?

  1. #1
    No Avatar
    newbie_newbie Khách

    Question Sự khác nhau giữa tham chiếu và con trỏ ?

    Mình vẫn chưa hình dung được sự khác nhau này ? Con trỏ và tham chiếu có những điểm mạnh và điểm yếu gì ? Mình thấy tham chiếu và con trỏ đều có thể thay đổi giá trị nơi nó chiếu đến, đâu có khác nhau gì đâu ? Các bạn chỉ giúp nha ! Cám ơn

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Biến con trỏ là biến dùng để lưu giá trị địa chỉ, thực chất nó là tham trị, chứa trị địa chỉ, cho phép thay đổi giá trị của 1 thông số thực thông qua địa chỉ của thông số thực mà nó đang lưu.
    Tham chiếu thực chất chỉ là 1 cái tên khác của tham số thực, mọi thay đổi trên nó tức là thay đổi trên tham số thực.

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

    Con trỏ (Đúng hơn phải nói là Kiểu con trỏ) là một biến chứa địa chỉ của một biến nào đó. Nếu bạn đã biết về con trỏ thì Dreaminess không giải thích nữa.

    Tuy nhiên: Kiểu con trỏ rất mạnh mẽ nhưng không ít rắc rối khi dùng nó. Để khắc phục điểm này ở ngôn ngữ C++ có đưa thêm một kiểu gọi là kiểu tham chiếu (reference type), kiểu tham chiếu này có quan hệ rất gần gũi với kiểu con trỏ, nhưng an toàn hơn con trỏ. Lưu ý rằng một số ngôn ngữ không có kiểu con trỏ nhưng vẫn có kiểu tham chiếu chẳng hạn ngôn ngữ Basic

    Kiểu tham chiếu thực chất nó chỉ là một alias đại diện cho một biến nào đó, lưu ý là nó không phải là một pointer.

    Trước hết hãy xét một ví dụ:

    Ví dụ:

    Code:
    int  i  = 0
    int *pi=&i;   // pi là con trỏ, trỏ đến địa chỉ của biến i
    int &ali = i   // ali là một alias(bí danh) đối với biến i
    *pi=2         // Việc này sẽ gán luôn i=2
    ali = 2        // Việc gán này không khác gì việc gán i=2
    Mọi hoạt động thay đổi của ali sẽ hoàn toàn giống với việc hoạt động thay đổi của biến i.

    Ví dụ: pi=&ali // Việc này sẽ gán pi với địa chỉ của biến i (Đúng như gán pi=&i), chứ không phải là địa chỉ của ali.

    Khi sử dụng trong hàm chẳng hạn

    int funvalue (int a);
    int funref (int &a);

    Mỗi khi sử dụng hàm funvalue, đối a sẽ được tạo mới ở dạng biến local, khi kết thúc biến local này sẽ bị giải phóng, và sẽ bị mất sau khi hàm kết thúc.

    Ngược lại khi sử dụng hàm funref, đối a vẫn giữ nguyên. biến a lúc này có thể giống như một biến global.


    Qua đây bạn sẽ thấy được một vài điểm khác nhau giữa kiểu con trỏ và kiểu tham chiếu.

    Chúc may mắn.
    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!

  4. #4
    No Avatar
    newbie_newbie Khách

    Mặc định Hỏi về "return" va biến cục bộ !

    Mìh chưa hiểu lắm về lệnh này ! Mình được biết là nó trả về cái jì đó !
    ví dụ như mình có đoạn code sau :
    Code:
    void create()
    {
    	int a;
    	a = 10;
    }
    
    int ret()
    {
    	int b;
    	b = 20;
    	return b;
    }
    void main()
    {
    	create();
    	c = ret();
    }
    trong hàm main, nếu như 2 hàm này thực hiện xong, biến a và b sẽ bị thu hồi !
    Cho mình hỏi thêm là : b bị thu hồi vùng nhớ, vậy làm sao lệnh return có thể trả về giá trị b để gán cho c ?
    Đồng ý là lệnh return thực hiện trước khi hàm thoát ra ! nhưng việc này ví như mình cho em bé cục kẹo, nó cầm chơi một chút, rồi mình lấy lại ! Cuối cùng, nó đâu có kẹo ?
    Các bạn giúp dùm

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

    Cái hàm create() Dreaminess chả biết nó để làm gì cả??

    xét từ hàm main()
    Hàm main sẽ gọi 2 hàm:

    Hàm create(); Trong khi hàm này được gọi thì sẽ tạo một biến local dưới cái tên là a, sau đó gán a=10 và giải phóng a. Hàm này chẳng có tác dụng gì cả.

    Hàm ret(); Trong khi hàm này được gọi cũng sẽ tạo một biến local dưới cái tên là b, sau đó gán b =20. Tiếp nữa là sẽ trả về cho hàm ret giá trị mà b đang có, (tương đương với việc gán ret=b). Cuối cùng giải phóng b.

    Lưu ý: Các hàm, và biến thuộc trong một hàm nào đó sẽ chỉ được giải phóng(nếu có thể) khi hàm kết thúc theo thứ tự từ hàm/biến gọi/tạo sau cùng đến hàm/biến đầu tiên.

    Tiếp theo trong hàm main sẽ là thực hiện lệnh gán c=ret. Kết quả tại thời điểm này sẽ là c=20.

    Sau khi thực hiện xong xuôi hàm main(), chương trình sẽ giải phóng lần lượt: biến c, hàm ret, hàm create, và kết thúc chương trì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!

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

    Mặc định Sự khác nhau giữa tham chiếu và con trỏ ?

    Đọc cái này cho đầy đủ, đỡ phải giải thích lằng nhằng
    http://www.cplusplus.com/doc/tutorial/pointers.html

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

  1. tham trị & tham biến trong C/C++ khác nhau như thế nào?
    Gửi bởi rocktea trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 28-04-2016, 11:14 AM
  2. Kiểu string trong c# là tham chiếu hay tham trị ???
    Gửi bởi thvnhn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 04-11-2013, 08:38 PM
  3. Bài tập C Bài tập tính lãi ngân hàng dùng đệ quy hoặc tham chiếu, tham trị
    Gửi bởi thaohoangf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 08-10-2012, 08:24 AM
  4. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  5. Bài tập C++ Sử dụng tham trị và tham biến khi thao tác trên mảng có khác nhau?
    Gửi bởi 5fox trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 21-12-2011, 08: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