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?
Bài liên quan
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.
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
Bạn nên hiểu dấu
*
đấy theo 2 trường hợp:Nếu viết là
int* pt
hoặcint *pt
hoặcint * pt
thì có nghĩa là bạn đang khai báo biếnpt
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ỉ.Sau khi biến con trỏ đã được khai báo, bạn viết
*pt = 100
hoặcprintf('%d', *pt)
thì ở đây mới là để lấy giá trị mà con trỏ trỏ tới.