![淺析C語言數(shù)組與指針_第1頁](http://file4.renrendoc.com/view/9b72ee151ed0c67bd466bc043a6137ce/9b72ee151ed0c67bd466bc043a6137ce1.gif)
![淺析C語言數(shù)組與指針_第2頁](http://file4.renrendoc.com/view/9b72ee151ed0c67bd466bc043a6137ce/9b72ee151ed0c67bd466bc043a6137ce2.gif)
![淺析C語言數(shù)組與指針_第3頁](http://file4.renrendoc.com/view/9b72ee151ed0c67bd466bc043a6137ce/9b72ee151ed0c67bd466bc043a6137ce3.gif)
![淺析C語言數(shù)組與指針_第4頁](http://file4.renrendoc.com/view/9b72ee151ed0c67bd466bc043a6137ce/9b72ee151ed0c67bd466bc043a6137ce4.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、淺析C語言數(shù)組與指針淺析語言數(shù)組與指針在語言中數(shù)組表示一組數(shù)據(jù)類型都一樣的有序數(shù)據(jù)的集合,在內存中,它們占有連續(xù)的存儲單元,數(shù)組分一維數(shù)組和多維數(shù)組,一維數(shù)組是數(shù)組中最簡單的,比擬容易理解,用一個數(shù)組名和一個下標就能唯一地確定一個元素。多維數(shù)組理解相對抽象些,以二維數(shù)組舉例,二維數(shù)組在內存中雖然是占一個連續(xù)的存儲單元,但是習慣上把它寫成矩陣的形式,更有助于理解其邏輯構造,二維數(shù)組每一行都可以看成一個一維數(shù)組。任何數(shù)組它們的數(shù)組名代表數(shù)組的首地址。而指針是語言的另一個重要概念,指針代表地址,并且指針是可以挪動的,對于數(shù)組和指針的使用,初學者往往感到無所適從,筆者根據(jù)多年經(jīng)歷,利用等級考試中的典型
2、實例來進展描繪和分析,所有實例如都在V6.0環(huán)境下通過,希望初學者能快速理解和掌握。1指向一維數(shù)組指針的定義及數(shù)組元素的引用定義指向數(shù)組元素的指針變量的方法,與定義指向變量的指針變量一樣,假設定義了一個一維數(shù)組inta5和一個指針變量int*p,如何讓指針變量指向數(shù)組呢?對于一維數(shù)組來說,只要讓指針變量指向它的數(shù)組元素就可以,因為數(shù)組名a代表數(shù)組的首地址,所以p=a0或p=a都表示指針指向數(shù)組的第一個元素,直接定義可以寫成int*p=a。而p+1表示指向下一個元素,p-1表示指向數(shù)組上一個元素,這樣,其后面第i個元素它的地址就可以表示成p+i,也可以表示成a+i。假設p指向a0,而ai的地址可
3、以用p+i或a+i表示,所以,引用數(shù)組元素的時候,既可以用普通的下標法如ai形式,也可以用指針法,這時*p+i和*a+i都可以表示ai元素。例1:#inludevidaininta6=10,20,30,40,50,60,*p,i=3;p=a1;printf%d,%dn,ai,pi;實例分析:此實例中,定義了一個指針指向a1,i的值為3,輸出a3和p3的值,很多初學者以為pi的寫法是錯誤的,有的初學者那么認為a3和p3等價,輸出結果是40,40,但實際上,在語言中,指針變量可以帶下本文由論文聯(lián)盟.LL.搜集整理標,程序在編譯時,會把下標的處理轉換為地址的,pi處理成*p+i,因為一開場的時候p指
4、向a1,那么p+i那么表示往后數(shù)第三個元素,也就是a4,故此程序輸p出結果為40,50。假設一開場p=a,也就是說指針指向第一個元素,那么ai和pi的值就是相等的。2指針與自增自減運算符的結合指針假設與自增自減運算符結合起來使用,初學者最容易出錯,以自增運算符為例,假設程序中出現(xiàn)*p+、*p+、*+p、+*p等算式,看起來差不多,很多初學者搞不懂它們之間的區(qū)別,殊不知失之毫厘,謬以千里,因為不懂它們的區(qū)別,分析程序時往往得到錯誤的結果。首先,大家要知道*和+都是單目運算符,它們同一個優(yōu)先級,其結合方向是自右向左的,所以*p+和*p+等價,根據(jù)自增運算符的名前先取原那么,要先取*p的值,再使p自
5、增1,即指向下一個數(shù)組元素,*+p那么是先使p指向下一個元素,再取*p的值,這幾個算式都是對所指的地址加1。+*p表示先取*p,再在這個值的根底上加1,也就是對所指的元素的值加1。例2:#inludevidaininta5=2,4,6,8,10,*p,*k;p=a;k=p;printf%d,*p+;printf%dn,*k;實例分析:此實例中,自先定義了數(shù)組a,指針p和指向指針的指針k,通過p=a和k=p語句,使指針p指向數(shù)組a的首地址,k指向指針p,接下來printf%d,*p+語句,是先輸出*p的值為2,再使指針往后指,再輸出*k的指也就是*p的值,此時,p指向4,輸出4,程序的輸出結果為
6、24。3指向二維數(shù)組指針的定義及數(shù)組元素的引用在使用指針指向二維數(shù)組時首先要理解多維數(shù)組元素的地址表示方式,假設有二維數(shù)組a33,那么在邏輯上可以把這個二維數(shù)組看作是一個3行3列的表格,也可以看成是一個有3個元素的一維數(shù)組,該數(shù)組的每個元素也是一個一維數(shù)組,序號為0的行的首地址可以用a0、a0或a表示,序號為1的行的首地址可表示為a1、a1或a+1,如圖1所示。根據(jù)一維數(shù)組指針的定義,a0的值可以又表示成為*a,a1可以表示為*a+1,ai即為*a+i。序號為0的行的首地址也就是元素a00的地址,即a00,它后面幾個元素的地址可以表示為a0+1,a0+2,假設用指針法表示為*a+0、*a+0+
7、1和*a+0+2,以此類推,第i行第j列元素的地址aij可以表示成為ai+j,指針法表示為*a+i+j,也就是說aij、ai+j、*a+i+j是等價的。這樣,對于一個二維數(shù)組來說,元素aij可用指針法表示為*ai+j或*a+i+j。指針變量指向二維數(shù)組中的元素,可以有兩種定義指針方法,一種是直接定義成指向數(shù)組元素的指針變量,如int*p,再讓p指向數(shù)組中某個詳細元素;還有一種是定義成指向二維數(shù)組某一行的指針變量,假設一行有個數(shù)據(jù),那么可以定義成int*p=a,這樣就可以讓指針指向第一行。例3:#inludevidaininta34=1,3,5,7,9,11,13,15,17,19,21,23;
8、int*p4=a,i,j,k=0;fri=0;i3;i+frj=0;j2;j+k=k+*p+i+j;printfk=%dn,k;程序分析:此實例中,指針p指向二維數(shù)組a的首地址,然后執(zhí)行循環(huán),首先i=0,j=0,累加*p+0+0,即a00,接著i=0,j=1,累加*p+0+1,即a01,然后j=2時跳出內循環(huán),以此類推,執(zhí)行下一次外循環(huán)i=1時,累加a10和a11,執(zhí)行外循環(huán)i=2時累加a20和a21最后i=3時跳出整個循環(huán),由此看出,語句在這里其實就是累加二維數(shù)組第一列和第二列的元素。最后結果為1+3+9+11+17+19=60,輸出k=60。總之,指針和數(shù)組結合起來使用非常靈敏,同一地址有多種表示方法,而指針根據(jù)地址表示的不同可定義成指向數(shù)組元素的指針和指向某行數(shù)據(jù)的指針,初學者
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/Z 44938.1-2024機械電氣安全第1部分:用于保護人員安全的傳感器
- racemic-8-Hydroxy-cannabichromene-生命科學試劑-MCE-7832
- Mouse-Laminin-生命科學試劑-MCE-7265
- 二零二五年度雙方2025年度智能機器人研發(fā)團隊用工合同
- 2025年度自媒體合伙人合同版:短視頻平臺網(wǎng)紅孵化與推廣合同
- 防震防火的應急預案
- 上海市商業(yè)租賃合同
- 產(chǎn)業(yè)基地設施維護合同
- 上海市汽車租賃合同模版正式版
- 個人住宅購買合同定金協(xié)議
- 2022屆“一本、二本臨界生”動員大會(2023.5)
- 《簡單教數(shù)學》讀書-分享-
- 口腔頜面外科學 功能性外科
- 脊椎動物學知識點歸納各綱特征
- GB/T 27476.5-2014檢測實驗室安全第5部分:化學因素
- 金屬非金屬礦山重大生產(chǎn)安全事故隱患判定標準課件
- 四年級上冊數(shù)學課件-一般應用題 全國通用(共26張PPT)
- 肝臟炎性假瘤的影像學表現(xiàn)培訓課件
- 國家行政機關公文格式課件
- 業(yè)務員回款考核辦法
- 急性心梗的護理業(yè)務學習課件
評論
0/150
提交評論