《C程式設計語言》筆記 (五) 指標與數組

來源:互聯網
上載者:User

標籤:記憶體   運行時   維數   c語言   其他   修改   文法   highlight   log   

5.1 指標與地址
指標是一種儲存變數地址的變數ANSI C使用類型void*(指向void的指標)代替char *作為通用指標的類型一元運算子&可用於取一個對象的地址: p = &c把C的地址賦值給變數p,我們稱p為指向c的指標.地址運算子&只能應用於記憶體中的對象,即變數與數組元素.不能作用於運算式 常量或register變數一元運算子*是間接定址或間接引用運算子.當它作用於指標時,將訪問指標所指向的對象由於指標也是變數,所以在程式中可以直接使用,而不必通過間接引用的方法使用

  

5.2 指標與函數參數
C語言是以傳值的方式將參數傳遞給被調用函數,因此被調用函數不能直接修改主調函數中的變數的值

  

5.3 指標與數組
通過數組下標所能完成的任何操作都可以通過指標來實現一般來說,用指標編寫的程式比用數組編寫的程式執行速度快在計算數組元素a[i]的值時,C語言實際上先將其轉換為 *(a+i)的形式,然後再進行求值,因此在程式中這兩種形式是等價的pa[i] = *(pa+i)一個通過數組和下標實現的運算式可等價地通過指標和位移量實現數組名和指標之間有一個不同之處.指標是一個變數當把數組名傳遞給一個函數時,實際上傳遞的是該數組的第一個元素的地址在被調用函數中,該參數是一個局部變數,因此,數組名必須是一個指標,也就是一個儲存地址值的變數.

  

5.4 地址算術運算
如果P是一個指向數組中某個元素的指標,那麼p++將對p進行自增運算並指向下一個元素,而p+=i 將對p進行加i的增量運算,使其指向p當前所指向的元素之後的第i個元素指標與整數之間不能互相轉換,但0是唯一的例外常量0可以賦值給指標,指標也可以和常量0進行比較程式中經常用符號常量NULL代替常量0,這樣便於清晰地說明常量0是指標的一個特殊值指標的減法也是有意義的:如果p和q指向相同數組中的元素,且p<q,那麼q-p+1就是唯一p和q指向的元素之間的數目指標的算術運算具有一致性:如果處理的資料類型是比字元型佔據更多儲存空間的浮點類型,並且p是一個指向浮點類型的指標,那麼p++後,p將指向下一個浮點數的地址有效指標運算包括相同類型指標之間的賦值運算;指標同整數之間的加法或減法運算指向相同數組中元素的兩個指標之間的減法或比較運算;將指標賦值為0或指標與0之間的比較運算其他所以形式的指標運算都是非法的

  

5.5 字元指標與函數
字串常量是一個字元數組在字串的內部表示中,字元數組以Null 字元‘\0‘結尾,所以,程式可以通過檢查Null 字元找到字元數組的結尾.字串常量佔據的儲存單元也因此比雙引號的字元數大1

  

5.6 指標數組以及指向指標的指標
指標本身也是變數,所以它們也可以像其他變數一樣儲存在數組中

  

5.7 多維陣列
C語言提供了類似於矩陣的多維陣列,但實際上它們並不像指標數組使用的那樣廣泛

  

5.8 指標數組的初始化5.9 指標與多維陣列
對於初學者來說,很容易混淆二維數組與指標數組之間的區別
int a[10][20];
int *b[10];
從文法上講,a[3][4]和b[3][4]都是對一個int對象的合法引用

但是a是一個真正的二維數組,它分配200個int類型的長度儲存空間

對b來說該定義僅僅分配了10個指標,並且沒有對他們初始化,它們的初始化必須以顯示的方式進行,比如靜態初始化或通過代碼初始化

指標數組的另一個優點在於,數組的每一行長度可以不同

指標數組最頻繁的用處是存放不同長度的字串

  

5.10 命令列參數
在支援C語言的環境中,可以在程式開始執行時將命令列參數傳遞給程式.調用主函數main時,它帶有兩個參數第一個參數不是運行時命令列參數的個數(argc)第二個參數是一個指向字串數組的指標,其中每個字串對應一個參數

UNIX系統中C語言程式有一個公用的約定:以負號開頭的參數表示一個可選標誌或參數.
假定用-X 表示列印所以與模式不匹配的文本行,用-n表示列印行號


  

5.11 指向函數的指標
在C語言中,函數本身不是變數,但可以定義指向函數的指標這種類型的指標可以被賦值 存放在數組中,傳遞給函數以及作為函數的傳回值等//指向函數的指標int (*comp)(void *,void *);*comp代表一個函數

   

5.12 複雜聲明
C語言的聲明不能從左至右閱讀,而且使用了太多的圓括弧int *f();//f是一個函數,它返回一個指向int類型的指標int (*pf)(); //pf是一個指向函數的指標,該函數返回一個int類型的對象它們之間的含義差別說明,*是一個首碼運算子,其優先順序低於(),所以聲明中必須使用圓括弧以保證正確的結合順序

  

《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.