日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《C程序设计语言》笔记 (五) 指针与数组

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C程序设计语言》笔记 (五) 指针与数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 字符指針與函數

字符串常量是一個字符數組在字符串的內部表示中,字符數組以空字符'\0'結尾,所以,程序可以通過檢查空字符找到字符數組的結尾.字符串常量占據的存儲單元也因此比雙引號的字符數大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類型的對象它們之間的含義差別說明,*是一個前綴運算符,其優先級低于(),所以聲明中必須使用圓括號以保證正確的結合順序

  

轉載于:https://www.cnblogs.com/dafume/p/7801063.html

總結

以上是生活随笔為你收集整理的《C程序设计语言》笔记 (五) 指针与数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。