關於對指標理解

2021-07-24 21:55:54 字數 1076 閱讀 2881

在c語言中,記憶體單元的位址稱為指標,打個比喻。

* 代表****,0x2000位址代表門牌號,&取位址符。

i_pointer-----指標變數,它的內容是位址量

*i_pointer----指標的目標變數,它的內容是資料

&i_pointer---指標變數占用記憶體的位址

i_pointer (內容位址量) = &i(取i位址)  = &(*i_pointer)(取這個指標的位址)

i  (代表乙個資料,直接訪問。如i=3)=    *i_pointer (取內容,間接訪問) =   *(&i)(間接訪問)

沒有*的都只表示位址,帶星號代表取位址內的內容即資料。

一邊指標都需要鎖定,以免記憶體位址紊亂,int  *p 這種就容易錯亂。

指標的指標  **p2 = &p1 (*p2=p1,**p2=&p2)

指標變數可以進行加減運算,例如p++、p+i、p-=i。指標變數的加減運算並不是簡單的加上或減去乙個整數,而是跟指標指向的資料型別有關。

給指標變數賦值時,要將乙份資料的位址賦給它,不能直接賦給乙個整數,例如int *p = 1000;是沒有意義的,使用過程中一般會導致程式崩潰。

使用指標變數之前一定要初始化,否則就不能確定指標指向**,如果它指向的記憶體沒有使用許可權,程式就崩潰了。對於暫時沒有指向的指標,建議賦值null。

兩個指標變數可以相減。如果兩個指標變數指向同乙個陣列中的某個元素,那麼相減的結果就是兩個指標之間的元素個數。

陣列也是有型別的,陣列名的本意是表示一組型別相同的資料。在定義陣列時,或者和 sizeof、& 運算子一起使用時陣列名才表示整個陣列,表示式中的陣列名會被轉換為乙個指向陣列的指標。

陣列指標int (*p)[str] 

指標陣列 int *p[str]

求乙個字串的長度:

#include

int main()

printf("%d",len"); }

指標可以簡化程式,如果沒有學習指標,用陣列用for迴圈就顯得程式有點繁瑣。

指標的關係比較複雜,要學好c語言,指標絕對是重中之重。

不懂的時候就畫畫圖,用門牌號與****,這個關係通俗易懂。

對指標的理解

指針對一部分初學者來說一直是乙個無法逾越的障礙,沒有指標的c語言就好像沒有左腿的短跑運動員。今天我來試試換一種方法來理解指標,希望能幫還在為指標掙扎的朋友們理清思路,高手略過即可。我們先認為記憶體是一家客棧 看起來這和老掉牙的大樓的比喻沒什麼區別,但是請你耐心看下去 同大部分的客棧一樣,這家客棧有天...

對指標的理解

在c語言中可以認為一切皆位址。int a 10 1 根據函式型別申請一塊記憶體,並將記憶體的名字命名為a 2 將10以二進位制補碼形式寫入記憶體 賦值 我們將這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換的方式,稱為變數的 直接引用 記憶體是線性,因為不同型別的變數占用不同大小的...

個人對指標的指標理解

每次一看到兩個 號,就頭疼,終於在一次看源 時,看了半天才弄明白其中含義,所以寫一寫對指標的指標的理解。int main 以乙個小例子來說明 我們將a指標稱為一級指標 因為a指標變數儲存的位址儲存的是乙個具體的數值或者字元,反正不再是位址值 b稱為二級指標,因為b是指向指標的指標,以此類推long ...