版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C_C指針指針應用詳解前言:復雜類型說明要了解指針多多少少會出現(xiàn)一些比較復雜的類型所以我先介紹一下如何完全理解一個復雜類型要理解復雜類型其實很簡單一個類型里會出現(xiàn)很多運算符他們也像普通的表達式一樣有優(yōu)先級其優(yōu)先級和運算優(yōu)先級一樣所以我總結了一下其原則:從變量名處起根據(jù)運算符優(yōu)先級結合一步一步分析.下面讓我們先從簡單的類型開始慢慢分析吧:intp這是一個普通的整型變量intp首先從P處開始先與結合所以說明P是一個指針然后再與int結合說明
2、指針所指向的內容的類型為int型.所以P是一個返回整型數(shù)據(jù)的指針intp[3]首先從P處開始先與[]結合說明P是一個數(shù)組然后與int結合說明數(shù)組里的元素是整型的所以P是一個由整型數(shù)據(jù)組成的數(shù)組intp[3]首先從P處開始先與[]結合因為其優(yōu)先級比高所以P是一個數(shù)組然后再與結合說明數(shù)組里的元素是指針類型然后再與int結合說明指針所指向的內容的類型是整型的所以P是一個由返回整型數(shù)據(jù)的指針所組成的數(shù)組int(p)[3]首先從P處開始先與結合說
3、明P是一個指針然后再與[]結合(與“()“這步可以忽略只是為了改變優(yōu)先級)說明指針所指向的內容是一個數(shù)組然后再與int結合說明數(shù)組里的元素是整型的.所以P是一個指向由整型數(shù)據(jù)組成的數(shù)組的指針intp首先從P開始先與結合說是P是一個指針然后再與結合說明指針所指向的元素是指針然后再與int結合說明該指針所指向的元素是整型數(shù)據(jù).由于二級指針以及更高級的指針極少用在復雜的類型中所以后面更復雜的類型我們就不考慮多級指針了最多只考慮一級指針.int
4、p(int)從P處起先與()結合說明P是一個函數(shù)然后進入()里分析說明該函數(shù)有一個整型變量的參數(shù)然后再與外面的int結合說明函數(shù)的返回值是一個整型數(shù)據(jù)Int(p)(int)從P處開始先與指針結合說明P是一個指針然后與()結合說明指針指向的是一個函數(shù)然后再與()里的int結合說明函數(shù)有一個int型的參數(shù)再與最外層的int結合說明函數(shù)的返回類型是整型所以P是一個指向有一個整型參數(shù)且返回類型為整型的函數(shù)的指針int(p(int))[3]可以先
5、跳過不看這個類型過于復雜從P開始先與()結合說明P是一個函數(shù)然后進入()里面與int結合說明函數(shù)有一個整型變量參數(shù)然后再與外面的結合說明函數(shù)返回的是一個指針然后到最外面一層先與[]結合說明返回的指針指向的是一個數(shù)組然后再與結合說明數(shù)組里的元素是指針然后再與int結合說明指針指向的內容是整型數(shù)據(jù).所以P是一個參數(shù)為一個指針的值是指針本身存儲的數(shù)值,這個值將被編譯器當作一個地址,而不是一個一般的數(shù)值。在32位程序里,所有類型的指針的值都是一
6、個32位整數(shù),因為32位程序里內存地址全都是32位長。指針所指向的內存區(qū)就是從指針的值所代表的那個內存地址開始,長度為sizeof(指針所指向的類型)的一片內存區(qū)。以后,我們說一個指針的值是XX,就相當于說該指針指向了以XX為首地址的一片內存區(qū)域;我們說一個指針指向了某塊內存區(qū)域,就相當于說該指針的值是這塊內存區(qū)域的首地址。指針所指向的內存區(qū)和指針所指向的類型是兩個完全不同的概念。在例一中,指針所指向的類型已經(jīng)有了,但由于指針還未初始化
7、,所以它所指向的內存區(qū)是不存在的,或者說是無意義的。以后,每遇到一個指針,都應該問問:這個指針的類型是什么?指針指的類型是什么?該指針指向了哪里?(重點注意)4指針本身所占據(jù)的內存區(qū)指針本身占了多大的內存?你只要用函數(shù)sizeof(指針的類型)測一下就知道了。在32位平臺里,指針本身占據(jù)了4個字節(jié)的長度。指針本身占據(jù)的內存這個概念在判斷一個指針表達式(后面會解釋)是否是左值時很有用。2、指針的算術運算指針可以加上或減去一個整數(shù)。指針的這
8、種運算的意義和通常的數(shù)值的加減運算的意義是不一樣的,以單元為單位。例如:例二:a[20]intptr=(int)a強制類型轉換并不會改變a的類型ptr在上例中,指針ptr的類型是int它指向的類型是int,它被初始化為指向整型變量a。接下來的第3句中,指針ptr被加了1,編譯器是這樣處理的:它把指針ptr的值加上了sizeof(int),在32位程序中,是被加上了4,因為在32位程序中,int占4個字節(jié)。由于地址是用字節(jié)做單位的,故pt
9、r所指向的地址由原來的變量a的地址向高地址方向增加了4個字節(jié)。由于類型的長度是一個字節(jié),所以,原來ptr是指向數(shù)組a的第0號單元開始的四個字節(jié),此時指向了數(shù)組a中從第4號單元開始的四個字節(jié)。我們可以用一個指針和一個循環(huán)來遍歷一個數(shù)組,看例子:例三:intarray[20]=0intptr=arrayf(i=0i20i)(ptr)ptr;這個例子將整型數(shù)組中各個單元的值加1。由于每次循環(huán)都將指針ptr加1個單元,所以每次循環(huán)都能訪問數(shù)組的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論