![指針百度文庫_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/790dde75-b553-4401-8f7f-7657617d3356/790dde75-b553-4401-8f7f-7657617d33561.gif)
![指針百度文庫_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/790dde75-b553-4401-8f7f-7657617d3356/790dde75-b553-4401-8f7f-7657617d33562.gif)
![指針百度文庫_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/790dde75-b553-4401-8f7f-7657617d3356/790dde75-b553-4401-8f7f-7657617d33563.gif)
![指針百度文庫_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/790dde75-b553-4401-8f7f-7657617d3356/790dde75-b553-4401-8f7f-7657617d33564.gif)
![指針百度文庫_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/790dde75-b553-4401-8f7f-7657617d3356/790dde75-b553-4401-8f7f-7657617d33565.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、指針一、 指針的定義計算機的內存都以字節(jié)為單位進行了編號,這個編號值就稱為內存單元的地址值,簡稱內存地址。設某變量的值是地址值,這種變量稱為指針變量,簡稱為指針。指針的定義形式為:存儲類型 數據類型 *變量名;或者,存儲類型 數據類型* 變量名; 。說明:1 存儲類型是指針本身的存儲類型,分別是auto、register、static和extern四種,缺省為auto。2 數據類型是指針所指向的數據的數據類型。但是,在使用指針時經常認為指針的類型是“指向某類型”或說“某類型*”,并對應存儲相應類型的數據的地址。例如long*類型的指針存儲long類型數據的地址。3 “*”是指針的標識,并不是變
2、量名中的字符?!?”放在變量名前或者緊跟在數據類型后都可以,但是要切記指針的類型是“某類型*”型。一個“*”只能定義一個指針。4 一般地,內存地址是十六進制整數的值。將地址值賦給一個指針稱為該指針指向該地址(如果是變量或常量的地址,就可以說指針指向該變量或常量)。指針就能賦予地址值,如果賦予整型值會被當成地址,其它類型可能會產生錯誤。二、 指針的使用“*”和“&”運算符“&”運算符“&”稱為取地址運算符,它的作用是求取變量的內存地址,使用形式為:&變量 。說明:1 使用“&”運算符可以求得任何類型的變量的地址,但必須用對應類型的指針來存儲。2 指針不存在兼容存儲,即char、int、float
3、和double等幾種數值類型的指針不可混用,變量的類型必須和指針類型一致。3 “變量”可以是任何類型的變量,包括指針。如果是指針,就求得指針的地址。4 取地址運算符“&”和位運算符“&”雖然符號一樣,但編譯器會根據位置區(qū)別它們?!?”運算符“*”稱為指針運算符,它的作用是求取指針所指向內存地址中的值,使用形式為:*指針變量說明:1 指針運算符“*”只能作用于地址量(指針或數組名),不能作用于其它類型的變量。2 乘法運算符“*”、指針標識“*”和指針運算符“*”雖然符號都一樣,但編譯器會根據它的位置區(qū)別它們。三、指針的初始化指針在使用之前必須初始化,使用未初始化的指針時很危險的。指針初始化的方式
4、為:數據類型* 指針=&變量; 。如果不讓指針指向某個確定的變量,可以把它初始化為空指針,形如:數據類型* 指針=0; 。說明:符號“NULL”在標準庫中定義為9,在C中常常用于初始化空指針,但是在C+中最好使用0來初始化空指針。四、指針和數組對任意的一個數組array(省略類型和長度),設一個同類型的指針pa,若將數組的首地址賦給指針,pa=array,則稱指針pa是指向數組array的指針,數組array是指針pa指向的數組。指針不僅可以指向整個數組,還可以指向每個元素。指針指向元素的方式為:pa=&arrayi(將第i個元素的首地址賦給指針pa)。使用pa=&arrayi,表示指針pa指
5、向數組的第i個元素;又由于數組名表示數組的首地址(起始地址),故pa=&array0和pa=array等效,即指針指向數組同時也指向數組的第0個元素。由以上得出三種引用數組元素的方式:1 下標方式,例如:arrayi;2 數組名方式,例如:*(array+i;3 指針變量方式,例如:*(pa+i。一維數組與變量的關系很簡單也很直觀,但是二維及多維數組略微復雜。對任意的二維數組array(省略類型和長度),數組名array代表了整個數組的首地址,同時也是第0行的首地址,也是第0行第0列元素的首地址,所以有以下等式成立:array=array0=&array00 。在這里我引入“行指針”和“列指針
6、”的概念。當然很多書上沒有這么說,但是我認為引入之后可以把這點內容講得更清楚(我在大學時教材就有這兩個概念)。下圖表示一個二維數組的邏輯分布:上圖所示(為了方便作圖,數組名array用一個字母a表示),“二維數組名+i”表示第i行的首地址,例如:array+i是第i行的首地址,i0。注意:1 數組名表示的是行指針,即array是行指針,array+i表示的是數組array第i行的首地址,移動方式是逐行移動;而arrayi是列指針,arrayi+j表示的是第i行第j列的元素的地址,它的移動方式只能是在同一行的元素上移動。這里規(guī)定:在行指針前用“*”運算符,將使行指針指向列;在列指針前用“&”運算
7、符,將使列指針指向行。因此,arrayi=*(array+i。因此如下等式成立:arrayi+j=*(array+i+j=&arrayij,這些指針都指向同一內存地址。因此又有這些等式:*(arrayi+j=*(*(array+i+j=arrayij。2 array+i和arrayi的值是相同的,但它們的移動方式不同,array+i是行指針,一行一行地移動,arrayi是列指針,一列一列地移動。如上圖示。3 &arrayi和arrayi的值也相同,但它們的移動方式也不同,&arrayi是行指針,arrayi是列指針,所以&arrayi+1和arrayi+1的含義不一樣前者指向下一行,后者指向下
8、一列??赡苌厦孢@段話說得很繞。如果覺得看起很麻煩可以直接看圖示中紅色箭頭的方向,應該能明白行指針和列指針移動方式的區(qū)別。更高維的數組就按照相應的方法分解為二維和一維數組來分析。char*類型的指針和指針數組就不詳述了,其它書上說得太多了。char*類型的指針可以表示一個字符串;指針數組就是數組元素是指針的數組,聲明方式為:數據類型* 數組名;五、常量指針和指向常量的指針舉個例子來說明。設三個指針的聲明分別是char* pstars;const char* pstars;char* const pstars;const char* const pstars;分析下這四個聲明有什么不同。號聲明是個
9、很普通的指針聲明,指針pstars指向一個char類型的數據的地址,這個數據可以是變量或常量。號聲明中,指針pstars指向一個常量的質地。號聲明中,指針pstars本身是個地址常量,但是它指向的數據可以是變量或常量。號聲明中,指針pstars本身是常量,同時它也指向一個常量。因此我們得出常量指針和指向常量的指針的定義。形如所示的這種指針稱為指向常量的指針;形如所示的這種指針稱為常量指針;形如的這種指針是一個指向常量的常量指針。六、多級指針如果一個指針指向另一個指針,呢么稱這個指針為指向指針的指針,又稱為二級指針。二級指針的定義形式為:數據類型* 指針名; 。由二級指針可以引申出更高級指針的定
10、義,如三級指針:數據類型* 指針名; 。說明:1 如果把二級分解下,可以寫成這種形式(數據類型* 指針名; 。也就是說,二級指針存放的是一個類型為“數據類型*”的指針的地址,比如int* pa,就可以看成是(int* pa,那么指針pa存放的就是一個類型是int*的指針的地址。三級指針就看成(“數據類型* 指針名”,進而再分解稱二級指針。2 用多級指針調用變量稱為多級訪問。例如,設int* pp; ,pp為一個二級指針,它指向另一個int*指針。如果賦值完畢后,調用變量就要使用“*pp”的形式。相應的,是幾級指針就要用幾個“*”號。七命令行參數主函數main(是可以帶有參數的。由于任何函數都不
11、能調用主函數main(,因此主函數main(的參數只能由操作系統(tǒng)賦予。主函數的參數有兩個:一個整型參數用于記錄從命令行上輸入的實參的個數,用argc表示;另一個參數是一個字符指針數組argv,它用來存儲從命令行上輸入的實參字符串的首地址,換言之,它的每個元素指向一個從命令行上傳遞而來的字符串。因此,主函數main(的完整形式為:返回值類型 main(int argc,char* argv說明:1 命令行是指操作系統(tǒng)的命令輸入接口。在windows下,可以通過command窗口或者運行菜單進入命令行。2 argv雖然是個數組名,但是在這里允許作為一個指針變量使用,即argv可像指針變量那樣作自增、自減以及加減一個整數等運算。3 在命令行上,各個實參之間的分隔符一般用空格。4 主函數main(的返回值類型可以是其它類型,這個返回值由操作系統(tǒng)獲得。備注:本人水平有限,加之在精力同樣有限的情況下,難免會有很多考慮不足之處,對指針這章說得比較簡約,像很多內容,比如指針的算術運算、指針數組、多級指針等概念都沒怎么說。這些東西在很多資料書上都有,讀者可以自行在網上查閱,再說也比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學低年級聽評課記錄
- 【人教版】八年級地理上冊第一章第二節(jié)《人口》聽課評課記錄及優(yōu)化訓練答案
- 蘇州蘇教版六年級數學上冊第三單元《分數應用題(1)》聽評課記錄
- 聽評課記錄六年級語文
- 新版華東師大版八年級數學下冊《16.2.2分式的加減分式的加減-同分母分式加減》聽評課記錄16
- 小學二年級數學100道口算題
- 蘇科版七年級數學上冊《2.2有理數與無理數》聽評課記錄
- 北師大版道德與法治七年級下冊1.2《理解情緒》聽課評課記錄
- 八年級歷史人教版下冊聽課評課記錄:第9課 對外開放
- 校企共建培訓中心合作協(xié)議書范本
- 第五講鑄牢中華民族共同體意識-2024年形勢與政策
- 中華人民共和國學前教育法
- 2024年貴州公務員考試申論試題(B卷)
- 三年級(下冊)西師版數學全冊重點知識點
- 期末練習卷(試題)-2024-2025學年四年級上冊數學滬教版
- 2025年公務員考試申論試題與參考答案
- 抑郁癥課件教學課件
- 關于消防安全評估設備操作說明詳解
- 2025年高考作文專練(25道真題+審題立意+范文)- 2025年高考語文作文備考總復習
- 中國高血壓防治指南(2024年修訂版)要點解讀
評論
0/150
提交評論