C語言學習筆記(6)

來源:互聯網
上載者:User

1. 指標的來源

在當代,大多數的現代電腦都會把記憶體分割成位元組,每個位元組都有著其唯一的地址。可執行程式由代碼和資料兩部分構成,而程式中的每個變數都佔有著一個或多個位元組,也就是說,每個變數都有著自己的地址。而這個就是指標的來源。

其實每個地址就是一個數,但是我們卻不能用數來表示地址,儲存地址,我們需要用指標變數。例如int *p = i,我們就可以說p是指標變數,儲存著變數i的地址。

那麼我們說int *p中,p就是指向int 類型對象的指標變數。

2. 取址運算子和間接定址運算子

&,取址運算子,如果x是變數,那麼&x就是變數x所在的地址。

*,間接定址運算子,如果p是指標變數,*p就代表p所指向的變數的值。

當我們在程式中聲明int *p時,其實並沒有讓p指向任何地址,只是一個null 指標,我們也稱之為懸浮指標,在程式中,我們應該盡量避免這樣的狀況,應該盡量當聲明的同時進行初始化。否則當今後不小心對*p進行賦值時,如果p恰好指向了某一塊系統記憶體位址,就會造成系統的崩潰。

其實我們第一次接觸取址運算子,應該是應用於scanf,現在我們來想想scanf(“%d”,&a)的含義,其實就是告訴scanf函數,要把讀取的值放到哪個地址的下面。

3. const保護參數

我們之前說過const代表常量,不允許改變,那麼我們也可以將const應用於指標參數上。例如:

void Test(const int *p)就代表*p是不可以改變的,意思也就是p所指向的整數不能被改變。

void Test(int * const p)則代表,p是不可以被改變的,也就是說p只能指向這一塊地址。

void Test(const int * const p)則代表,p只可以指向這一塊地址,並且這一塊地址的資料不能被改變。

4.指標作為傳回值

這裡我只提一點,不要反悔局部變數的指標變數,因為局部變數出了範圍馬上被回收,這時,該指標也就指向了一塊廢棄的地址。

當然,我們可以返回某些參數的地址,外部變數和靜態變數的地址。總之,要確保該指標指向的是一塊未經回收的地址即可。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.