C中指標符*和取址符&

來源:互聯網
上載者:User

標籤: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中指標符*和取址符&

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.