01/10/2018, 09:01

Hỏi về address operator &

em có 1 đoạn code như sau:

theo em được hiểu. Nếu viết things *pt thì phần pt sẽ là địa chỉ của con trỏ và phần *pt là giá trị mà con trỏ chỉ đến.
vậy nếu viết như trên (*pt = &grubnose) thì mình gắn giá trị địa chỉ của grubnose vào giá trị của con trỏ.
như vậy là khác nhau về loại ở 2 vế (giá trị vs địa chỉ). Tuy nhiên em đánh ở code vẫn chạy được chỉ là không hiểu tại sao?

rogp10 viết 11:02 ngày 01/10/2018

Viết vậy đúng rồi bạn câu đó là câu khai báo nên int* phải hiểu là kiểu con trỏ int.

lê đức huy viết 11:08 ngày 01/10/2018

mình hiểu là code đúng vì mình đã thử chạy code. Tuy nhiên mình ko hiểu ý nghĩa của câu lệnh
int * pt = &grubnose

Như bạn nói *pt là kiểu con trỏ thing. và giá trị của nó theo mình hiểu là giá trị mà con trỏ *pt chỉ vào
còn phần &grubnose là giá trị địa chỉ của grubnose. nên mình thấy 2 cái lệnh nhau nhưng ko hiểu tại sao gắn vào được với nhau.??? Đó là điều mình cần giải thích

Ice Tea viết 11:05 ngày 01/10/2018

Bạn nên hiểu dấu * đấy theo 2 trường hợp:

  1. Dùng khi khai báo
    Nếu viết là int* pt hoặc int *pt hoặc int * pt thì có nghĩa là bạn đang khai báo biến pt là con trỏ. Dấu * ở đây để chỉ ra bạn đang khai báo biến con trỏ. Và do đó biểu thức theo sau phải là địa chỉ.
  2. Dùng khi lấy giá trị của biến con trỏ
    Sau khi biến con trỏ đã được khai báo, bạn viết *pt = 100 hoặc printf('%d', *pt) thì ở đây mới là để lấy giá trị mà con trỏ trỏ tới.
Bài liên quan
0