C語言指標的經典習題: >給定a,b兩整數(ex:a=1,b=2),實現交換(a=1,b=2 -> a=2,b=1) 通常給的標準解法: ``` void swap_pointer(int* a,int* b) 3 { 4 int temp; 5 temp = *a;//用"依址取值"把a的數值給暫存變數 6 *a=*b;//用"依址取值"把b的數值給'a的指標對應的資料' 7 *b=temp;把暫存變數存到'b的指標對應的資料' 8 } 9 ``` 其中最讓新手困惑的是: ``` *a=*b ``` 在stackoverflow中看到有網友說: > The above statement will simply do this: **value(a) <-- value(b)** (i.e. pointer a will contain value 'd' ). 那句 **value(a) <-- value(b)** 讓我多年來的疑問都解答了(以前大一剛學時是直接背起來...) 依址取值其實蠻繞口的 我想可以把c的變數看成兩部分 > int a = 5; 指派完變數後,RAM需要空間存i=5,所以給定記憶體位置 pointer(a) <- 0x16 > 在c語言中我們用資料型態 int* 儲存pointer(a)的資訊(也就是0x16) > 利用運算子&a取的0x16 > 運用運算子 '*a' 讀取出 value(a)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up