keli4 指標運算 C語言指標 指標運算超詳細

2021-10-13 08:25:15 字數 1118 閱讀 7078

很多童鞋在接觸c語言使用指標的時候,總是本著乙個原則:能不用就不用!

所以對於指標的認識也難免有所侷限,所以禁停啊我們就來普及乙個「冷知識」,指標運算。

其實這樣的東西對於一些程式設計**湖早已經不是什麼秘密,只是說對於很多小萌新而言,覺得這樣的操作不可思議,高大上。

其實跟其他的很多知識一樣,都是「難者不會,會者不難」。

對於乙個嬰兒,可能對他而言走路就是一種挑戰,但是對於已經習慣了走路的我們,就很難理解不會走路時候的艱難——這也是本賬號撰文的初衷,力圖以一種更加通俗的視角對一些難點進行剖析。

回到正題,指標也是有運算的,只不過指標之只能進行有限的運算,包括賦值(沒有錯,賦值也是一種運算!)和部分算數運算和關係運算。

但是需要注意的是,無論是 & 還是 * 它們都是單目運算子,運算規則是要遵循從右往左的規則,這跟我們經驗中的加減乘除運算順序相反。

還有一點需要說明的是,在說明語句int *p;這樣的語句中,* 並不是運算子,實際上它沒有任何作用,僅僅是乙個標誌,表示後面緊跟的名字p是乙個指標變數而非普通變數。

拿我們經典的房間-房間號碼比喻模擬,說明語句中的*就像是在普羅大眾的普通房間外面鑲了個金框,顯得更加有格調,表示這裡面存放的位址,可不是尋常變數(上流~)。

下面還有一種運算是指標變數的賦值運算,它可以細分為定義同時初始化,先定義後初始化以及指標變數間相互賦值幾種情況,讀者可以自己找到例子。

接著是指標的加減運算,有點像是知道乙個房間號碼以後,通過把這個房間號碼加減就可以推算出隔壁房間的房間號碼一樣。

然後指標是可以有減法的,反映的是兩塊記憶體之間相隔的單元數,就像是房間號碼相減就表示房間之間間隔的房間數一樣。

但是指標是並沒有加法的,像是房間號碼相加並不能反映任何有意義的資料一樣,沒有乘法和除法也是一樣的道理。

最後指標是可以有關係運算的,反映的是兩位址之間在記憶體中的位置分配情況。這種關係運算在進行動態分配記憶體的時候經常有非常重要的作用。

舉乙個簡單的例子,童鞋們在其他地方可能接觸過二分法,這是一種高效的查詢方式,那麼應用這樣的思維同樣可以快速定位位址在記憶體中的位置。

最後還有關於指標使用的乙個常規操作——對於自己定義的指標你最好有乙個清晰的認識,要時刻關注它的指向,用的時候一定要給它乙個最初的指向,使用結束要歸零,防止野指標的產生。

感謝閱讀,學習使人強大。

4 指標運算 指標函式詳解

1.指標 資料型別 儲存位址的資料型別 2.指標變數 儲存位址的變數 4.指標的定義 型別名 變數名 型別名 變數名 表示指標變數 指標的計算 型別名 定義 先 後變數名,後型別名。int 3 1 p 2 5.指標所佔位元組 資料型別 在32位系統中,佔4個位元組 6.指標變數型別 去掉變數名 in...

c指標點滴三(指標運算)

1 include 2 include 3 4void main3 512 13 void main4 14 24 system pause 25 26 27void main5 28 30int p5 a 2 31 printf d a 2 32 p5 p5 2 相當於在陣列內部向後移動兩個元素的...

C語言指標系列三 指標運算本質

c語言指標系列三 指標運算本質 對於如下的宣告 int arr int p p arr 儘管最後乙個語句看起來是將乙個指標賦值為陣列名,但c語言中並不存在指向陣列的指標,日常說某某個指標指向了陣列只不過是一種習慣,並不是說真的有乙個陣列型的指標指向了陣列。事實上,如上面的程式段,因為arr是乙個in...