30/09/2018, 22:22

Thắc mắc về con trỏ trong C++

Mình có đoạn code ngắn sau:

int* xuat() {
int* p;
p = new int();
int* q;
q = p;
p = NULL;
return q;// tai sao p va q cung tro toi mot dia chi, trong khi gan p = NULL tai sao q khong bang NULL luon
// va return q thi van  duoc nhu thuong.
}

Một phần liên quan tới java nhưng dù sao mình cx hỏi luôn: Sự khác biệt giữa lưu trữ bộ nhớ trên C++ và java là gì? Ví dụ như về lưu trữ đối tượng của chúng.

viết 00:39 ngày 01/10/2018

p = new int();

     p = 0x100100
     ↓
    [int] (địa chỉ: 0x100100)

q = p; ``` q = 0x100100 ``` vì p là con trỏ nên giá trị của nó cũng là địa chỉ ô nhớ mà nó trỏ tới, suy ra ``` p = 0x100100 ↓ [int] (địa chỉ: 0x100100) ↑ q = 0x100100 ```
p = NULL; ``` p = 0x000000
[int] (địa chỉ: 0x100100)
   ↑
   q = 0x100100
q vẫn trỏ tới [int] ban đầu, chả liên hệ gì tới p cả. q = p đơn giản là copy giá trị của p vào q chứ q ko phải là tên khác của p. Chừng nào viết `int*& q = p;` thì mới có vấn đề, lúc này q là "tên khác" của p, nên p thay đổi giá trị thì q cũng thay đổi giá trị theo

int*& q = p;
 p (hay còn gọi là q) = 0x100100
 ↓
[int] (địa chỉ: 0x100100)
p = NULL;
 p (hay còn gọi là q) = 0x000000


[int] (địa chỉ: 0x100100)
Module Đk viết 00:23 ngày 01/10/2018

Rất rõ ràng, cảm ơn bạn và nếu có thể bạn trình bày giúp mình việc lưu trữ đối tượng của class trong C++ và java co gì khác nhau.

Bài liên quan
0