標籤:style blog color 使用 strong sp div on log
申明:轉載請註明出處!
學習了C語言之後,關於指標部分看了無數遍,有時候明明覺得自己看懂了,指標就是地址,但是總是在看代碼時候糊裡糊塗的搞不明白,最近又關於指標強化了一把。
大部分情況下對於程式中指標糊塗是因為不明白指標符“*”有兩個作用:
第一,作為標識符,定義變數為指標,如int *p;//只是說明變數p是指標變數,而沒有實際意義。
第二,作為運算子,像+,—,運算子一樣,如cout<<*p;//輸出指標變數p所指向的內容。
一般在程式中,第一次出現的指標符*,是作為標識符,申明指標變數,之後出現是作為運算子,但也不一定,主要還是看程式語境。
而“&”符號是一元運算子,取變數地址。
好了,關於指標我目前使用最多的是作為參數傳遞。由於自己研究影像處理,程式中往往要處理上千的圖片,記憶體常常溢出,記憶體配置尤其重要,這時候我被迫學習了指標的使用。
物件導向編程函數傳遞往往是值傳遞,但是值傳遞的形參是實參的拷貝,如果此時我用值傳遞,上千張圖片在記憶體中再拷貝一份可想而知,所以考慮用指標傳遞。
//指標傳遞void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp; cout<<*a<<‘ ’<<*b<<’\n’;}int main(){ int x=1; int y=2; swap(&x,&y); cout<<x<<‘ ’<<y<<’\n’;}//輸出2 1 , 2 1
上段程式中,實參傳遞的是x,y 的地址,形參定義a,b為指標變數,a,b內容為x,y地址的拷貝,程式中*a,*b是x,y地址所指向的內容,即為x,y。
所以程式中操作的也是x,y本身,此程式不需要重新在記憶體中開闢新的空間,之間操作實參本身。
另一種傳遞方式,引用傳遞,作用和指標傳遞一樣
//引用傳遞:void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp; cout<<a<<’ ‘<<b<<’\n’;}int main(){ int x=1; int y=2; swap(x,y); cout<<x<<’ ‘<<y<<’\n’; return 0;}
上段代碼跟指標傳遞結果一樣,均輸出2 1 , 2 1
函數調用形式跟值傳遞一樣,但是被調用函數的形參則引用x,y 的地址,函數中操作的也是x,y本身。
C中指標符*和取址符&