指標是什麼?如何理解指標?
因為指標是抽象的,所以這裡我把它擬物化,這樣解釋也許跟容易懂。
指標的專業解釋是:指標是記憶體單元的編號。
說明:以下的黑方框都代表乙個位元組
1)對於記憶體。
我們一般認為記憶體的基本單位是位元組,記憶體空間由很多位元組組成的。
記憶體可以儲存資料,所以我們把每個位元組當做是乙個「箱子」。
資料存入記憶體就好比在箱子裡面放資料
但是,c語言中各個型別在記憶體中佔得位元組數是不一樣的。
比如char型,只要乙個位元組就夠了,所以乙個字元只需乙個「箱子」。
而int型需要4(一般是4個位元組)個「箱子」才放得下。
double型則需要8個「箱子」。
2)編號。
記憶體中每乙個位元組都有乙個編號(是乙個用16進製表示的值),這就是指標(或者說位址)。
這就好比倉庫,為了方便管理貨物,為箱子都編了號。
3)數的儲存。
int a=100;
記憶體中的狀態:
定義a=100,a佔4個位元組,也就是有4個指標,那麼,哪個指標才是指向a的呢?
當乙個資料佔2個及以上位元組的記憶體空間時,把第乙個位元組的位址當做他的指標。
也就是說,這裡的0022fee0才是a的指標。
4)陣列與指標。
我們知道,陣列的元素在記憶體中是連續儲存的。
int arr[3]=;
記憶體中的狀態:
a[2]的
②陣列名也是乙個指標,它的值是第乙個元素的位址
即:arr == &a[0]
值得注意的是:陣列名是乙個指標常量,也就是說他的值是不能改變的。
比如 arr++ ,arr - -等試圖改變arr的值的做法都是不合法的
③arr是第乙個元素的位址,arr+1是第二個元素的位址,arr+2是第三個元素的位址。。。
有人會問:第二個元素個第三個元素的位址難道不應該是arr+4和arr+8嗎?
注意:陣列中arr+n指的是arr指向的元素的後面第n個元素的位址。
實質上來說,應該是:arr+k*n 。因為我們開始定義陣列為int型,所以編譯器自動取k的值為4。
k是乙個由編譯器根據陣列型別自動確定的值。
也就是說,arr[1]的位址是:arr+4*1 arr[2]的位址是:arr+4*2
僅作了解,我們在寫**時萬萬不能按照這個思路
個人對指標的指標理解
每次一看到兩個 號,就頭疼,終於在一次看源 時,看了半天才弄明白其中含義,所以寫一寫對指標的指標的理解。int main 以乙個小例子來說明 我們將a指標稱為一級指標 因為a指標變數儲存的位址儲存的是乙個具體的數值或者字元,反正不再是位址值 b稱為二級指標,因為b是指向指標的指標,以此類推long ...
關於STL 容器當中存放指標的個人理解
首先stl容器中最好是不要存放指標,如果外部被new出來的物件被銷毀了,那麼存放在容器中的指標就變成空指標了,這樣在遍歷的時候,就 了。但是在stl容器中存放指標也有他的好處。首先是在容器中放入物件 先來看看現象,在vector析構後。呼叫了a的析構函式。按正常套路來析構,應該是析構10次,但是注意...
C指標個人理解
先看乙個例子 void get addr num unsigned int p int main 輸出結果為 0123456 個人理解 首先,p為乙個變數,其記憶體上儲存的值為0,通過對p進行 取址,將p所在的記憶體傳遞給函式get addr num,而函式中將傳進來的記憶體 賦值,將p的記憶體儲存...