起因:
C相關語言最大障礙不外乎就是指標(大陸用語叫指針),老實說我也從來沒真正搞懂過,很多時候都是要用時才去搞懂,寫的出來且正確就滿足了完全很偷懶的性格。(心裡murmur一下:github上面用C語言寫的專案還是很多阿,不學一下似乎不行。)
問題:
所以這次我將統整一下*與&的絲路,方便以後我忘了直接看自己的blog就可以喚醒,希望可以達到多寫就會不用背境界。
在開始之前,首先感謝course台灣大學C語言課程,並且此篇文章所有圖都是從那課程講義上部份圖黏貼過來,讓絲路更加清楚與了解。
1.
int i ; int *iptr1; i=5; iptr1=&i;2.
&iptr=? *(&iptr)=? *iptr=? &(*iptr)=?
解決:
1.*變數:
首先要先了解C語言上指針的資料變數
int *iptr1 其實亦可以看成
int* iptr1; int*這代表宣告一個指向"整數"的指針變數 所以我們可以說iptr1是一個指標變數, 而指標變數的值為另一個變數的記憶體位址,即iptr與一般的變數一樣 只不過它存儲內容為一個記憶體位址
&與*:
這個常與*搞混,首先要知道如果是在宣告出現*時代表是一個宣告一個指標變數,
可別之後走火入魔了在宣告中看到*在那想是拿值還是拿位置了(至少我是這樣
>////<)。
當然都說到了走火入魔了,肯定要先講 &這個拉(哈)
主要會先提&這個,是因為只要記好&是取該變數的地址
&是取該變數的地址
&是取該變數的地址
&是取該變數的地址
&是取該變數的地址
而*則是取裡面(位置)值再去該位置取裡面的值,很饒舌對吧。。。。(也可能是我講的不好)
拿例子來說說有助於更了解我在說什麼
這張圖 i為5且iptr為i的記憶體位址
i=5;
iptr=&i;
即 &iptr 為取iptr的位置 也就是說 &iptr =3778 377c。
*(&iptr) 則先到iptr取這變數的位置再以這變數取裡面得值
所以就是iptr位置為3778 377c 再從3778 337c位置取變數位置。
*iptr為取iptr裡面得值(位置)再從這值去該值的地方去取這位址的值。
&(*iptr)為取iptr裡面得值(位置)再從這值去該值的地方去取這位址的值
5,再取這值位置3774。
結論:
其實仔細想想,理理絲路把*與&兩個想清楚,其實應該是不難&是取該變數的地址。
*是取裡面(位置)值再去該位置取裡面的值。
已阅
回覆刪除感谢忠实粉丝~
刪除