




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
指針汽車計算機基礎(chǔ)一、課程導(dǎo)入與其他高級編程語言相比,C語言可以更高效地對計算機硬件進行操作,而計算機硬件的操作指令,在很大程度上依賴于地址。指針提供了對地址操作的一種方法,因此,使用指針可使得C語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是C語言的精髓。指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)一、課程導(dǎo)入通過指針,可以簡化一些C編程任務(wù)的執(zhí)行,還有一些任務(wù)如動態(tài)內(nèi)存分配,沒有指針是無法執(zhí)行的。所以,想要成為一名優(yōu)秀的C程序員,學(xué)習(xí)指針是很有必要的。那么,什么是指針?為什么要使用指針?如何聲明一個指針呢?
指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)二、內(nèi)存與地址我們都見過像這樣掛在墻上的很多個郵箱,每個郵箱有一個房間編號,根據(jù)房間編號找到相應(yīng)的郵箱投入信件或取出信件。內(nèi)存與此類似,每個內(nèi)存單元有一個地址(Address),內(nèi)存地址是從0開始編號的整數(shù),CPU通過地址找到相應(yīng)的內(nèi)存單元,取其中的指令或者讀寫其中的數(shù)據(jù)。與郵箱不同的是,一個地址所對應(yīng)的內(nèi)存單元不能存很多東西,只能存一個字節(jié)。指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)二、內(nèi)存與地址在計算機中,把內(nèi)存區(qū)劃分為一個一個的存儲單元,每個單元為一個字節(jié)(8位),它們都有一個編號,這個編號就是內(nèi)存地址。指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)三、變量的指針3.1指針與指針變量數(shù)據(jù)在內(nèi)存中的地址也稱為指針,在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量。指針變量的值就是某份數(shù)據(jù)的地址,這樣的一份數(shù)據(jù)可以是數(shù)組、字符串、函數(shù),也可以是另外的一個普通變量或指針變量。簡言之,指針是程序數(shù)據(jù)在內(nèi)存中的地址,而指針變量是用來保存這些地址的變量。pointer指針整型指針:int*float指針:float*char指針:char*類/結(jié)構(gòu)體指針:Student*,User*指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.1指針與指針變量現(xiàn)在假設(shè)有一個char類型的變量c,它存儲了字符'K'(ASCII碼為十進制數(shù)75),并占用了地址為0X11A的內(nèi)存(地址通常用十六進制表示)。另外有一個指針變量p,它的值為0X11A,正好等于變量c的地址,這種情況我們就稱p指向了c,或者說p是指向變量c的指針。11A‘K’pc11A三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.1指針與指針變量在C語言中,指針的使用非常廣泛,因為使用指針往往可以生成更高效、更緊湊的代碼。總的來說,使用指針有如下好處:(1)指針的使用使得不同區(qū)域的代碼可以輕易的共享內(nèi)存數(shù)據(jù),這樣可以使程序更為快速高效;(2)C語言中一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)往往需要使用指針來構(gòu)建,如鏈表、二叉樹等;(3)C語言是傳值調(diào)用,而有些操作傳值調(diào)用是無法完成的,如通過被調(diào)函數(shù)修改調(diào)用函數(shù)的對象,但是這種操作可以由指針來完成,而且并不違背傳值調(diào)用。三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(1)指針變量定義的一般形式指針變量定義時,需要指定所指向的數(shù)據(jù)類型。聲明指針變量的一般形式為:“*”運算符通常稱為間接運算符或間接引用運算符,在聲明中以這種方式使用間接運行符時,它用以表明被聲明的變量是指針變量。三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(2)指針變量初始化指針變量聲明后,才可以寫入指向某種數(shù)據(jù)類型的變量的地址,或者說是為指針變量初始化。如下所示:三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(2)指針變量初始化上述賦值語句“pi=&i”表示將變量i的地址賦值給指針變量pi,此時pi就指向了i。3條賦值語句產(chǎn)生的效果是pi指向i,pc指向c,pf指向f,效果圖如下所示。“&”運算符稱為取地址運算符,作用是取得變量的內(nèi)存地址。三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(3)指針變量的定義說明①*號標(biāo)識該變量為指針類型,當(dāng)定義多個指針變量時,在每個指針變量名前面均需要加一個*,不能省略,否則為非指針變量。例如:指針變量指針變量整型變量三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(3)指針變量的定義說明②在使用已定義好的指針變量時,在變量名前面不能加*。例如:指針變量是p而不是*p該語句貌似把&a賦給了*p,而實際上p前的*僅是定義指針變量p的標(biāo)識,仍然是把&a賦給了p,故是正確的賦值語句。×√三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(3)指針變量的定義說明③類型為該指針變量所指向的基本類型,可以為int、char、float等基本數(shù)據(jù)類型,也可以為自定義數(shù)據(jù)類型。該指針變量中只能保存該基類型變量的地址。×√√×三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.2指針變量的定義(3)指針變量的定義說明④變量名是一合法標(biāo)識符,為了與普通變量相區(qū)分,一般指針變量名以字母p(pointer)開頭,如pa、pb等。三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)三、變量的指針3.3指針變量的引用利用指針變量可直接改變內(nèi)存中某一單元的值,這是一種對系統(tǒng)底層的訪問。指針變量為復(fù)雜的操作帶來便利的同時,也存在很大的安全隱患,使用不當(dāng)時極容易引起程序的終止設(shè)置系統(tǒng)死機。利用指針變量間接引用變量的形式為:間接運算符*在這里的作用是訪問指針變量所指向的內(nèi)存單元的值,如下所示:指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)3.3指針變量的引用該程序的輸出為101,因為指針變量*pi間接引用變量i,修改*pi的值等同于修改變量i的值。如果將代碼第4行改寫為:該程序的輸出仍然為101,*pi與i的作用是等同的。很多函數(shù)都需要取得變量的地址以修改變量的值,如scanf()函數(shù)。在上例中如果使用指針變量修改i的值,則可以用以下代碼實現(xiàn)。這條語句的作用等同于scanf("%d",&i),因為指針pi的值為變量i的地址,所以不能使用間接運算符。三、變量的指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.1數(shù)組和指針的關(guān)系數(shù)組是一系列相同類型變量的集合,不管是一維數(shù)組還是多維數(shù)組其存儲結(jié)構(gòu)都是順序存儲形式,即數(shù)組中的元素是按一定順序依次存放在內(nèi)存中的一塊連續(xù)的內(nèi)存空間中(地址連續(xù))。指針變量類似于一個地址箱,讓其初始化為某個數(shù)組元素的地址,以該地址值為基準(zhǔn),通過向前或向后改變地址箱中的地址值,即可讓該指針變量指向不同的數(shù)組元素,從而達到通過指針變量便可以方便地訪問數(shù)組中各元素的目的。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.2一維數(shù)組和指針在C語言中,指針變量加1表示跳過該指針變量對應(yīng)的基類型所占字節(jié)數(shù)大小的空間。指向數(shù)組元素的指針,其基類型為數(shù)組元素類型,指針加1表示跳過一個數(shù)組元素空間,指向下一個數(shù)組元素。C語言中規(guī)定:數(shù)組名代表數(shù)組的首地址(起始地址),也就是第一個元素的地址。當(dāng)指針變量p指向數(shù)組時,p+1指向數(shù)組的下一個元素。假設(shè)一個整型元素占兩個字節(jié),p+1是使p的地址加2個字節(jié)。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.3一維數(shù)組元素的引用當(dāng)指針變量和數(shù)組元素建立聯(lián)系后,可通過以下三種方式訪問數(shù)組元素。(1)用下標(biāo)法引用數(shù)組元素(直接訪問),一般形式為:四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.3一維數(shù)組元素的引用(2)用指針法引用數(shù)組元素(間接訪問),一般形式為:如果指針變量p被初始化為a之后,不再改變,那么也可以使用*(p+i)的形式訪問a[i]。例如:i為整數(shù),其范圍為:0<i<N,N為數(shù)組大小*(p+i)、*(a+i)則代表元素a[i]*(p+i)也可以寫成p[i]*(p+i)、*(a+i)、a[i]、p[i]等價,都代表數(shù)組a的第i+1個元素。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.3一維數(shù)組元素的引用(3)用指針變量指向數(shù)組元素(間接訪問)當(dāng)執(zhí)行語句p=a;后,可以通過改變p自身的值(可通過自增、自減運算),從而使得p中保存不同的數(shù)組元素的地址,進而通過*p訪問該數(shù)組中不同的元素。這是使用指針訪問數(shù)組元素較常用的形式。例如,如下代碼通過使用指針變量的移動來遍歷輸出數(shù)組中的每個元素。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.3一維數(shù)組元素的引用(3)用指針變量指向數(shù)組元素(間接訪問)確定p指針移動的起止地址,即循環(huán)控制表達式的確定是使用指針訪問數(shù)組元素的關(guān)鍵。p初始指向a[0],即p=&a[0];或p=a;。p終止指向a[N-1],即p=&a[N-1];或p=a+N-1;。故可得p的移動范圍為:p>=a&&p<=a+N-1;,而p<=a+N-1通常寫成p<a+N;,由此可得循環(huán)條件為:for(p=a;p<a+N;p++)。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.4指針變量與數(shù)組名的區(qū)別指針變量是地址變量,數(shù)組名是地址常量。即指針變量的內(nèi)容可以在程序運行過程中被改變;而數(shù)組名一旦被定義,它的值就不能被改變了。執(zhí)行p=a;后,*(a+i)與*(p+i)等價,均表示a[i]。p[i]與a[i]等價。a為地址值,可采用a[i]形式訪問數(shù)組元素,而p也為地址值,故也可采用p[i]形式訪問數(shù)組元素。a為常量地址,其值不能改變,故a++;語法錯誤。而p為變量,其自身的值可以改變,故p++;正確。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.5案例【例1】通過指針變量實現(xiàn)對數(shù)組元素的輸入和輸出操作。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.5案例補充說明:輸入輸出循環(huán)控制方法有多種,不管采用哪種,必須準(zhǔn)確確定起點和終點的表達式。(1)輸入若采用p的移動范圍確定循環(huán)次數(shù),則代碼如下。這時,for語句之前的p=a;語句可以去掉。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.5案例(2)輸出若采用移動指針變量p控制循環(huán)的執(zhí)行,因為執(zhí)行完輸入操作后,p已不再指向數(shù)組首元素,而是越界的a[N]初始位置,故必須重新給p賦值,讓其指向數(shù)組的首元素,代碼如下。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)4.5案例指針值加1與地址值加1的區(qū)別如下:一般地址單元也稱內(nèi)存單元,是按字節(jié)劃分的,即地址值加1,表示跳過一個字節(jié)的內(nèi)存空間。在C語言中,指針變量加1表示跳過該指針變量對應(yīng)基類型所占字節(jié)數(shù)大小的空間。四、數(shù)組和指針指針與數(shù)組課程導(dǎo)入變量的指針內(nèi)存與地址總結(jié)1.地址:內(nèi)存單元的編號。2.指針:變量的地址,如&i。3.指針變量:存放其它變量地址的變量。4.C語言指針變量的使用需要以下兩個運算符:(1)&:取地址運算符,返回運算對象的內(nèi)存地址。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煙臺開業(yè)活動方案
- 科研績效薪酬管理辦法
- 寶雞輟學(xué)孩子管理辦法
- 少數(shù)民族車輛管理辦法
- 監(jiān)管機關(guān)服裝管理辦法
- 咸豐白茶修剪管理辦法
- 品質(zhì)部rohs培訓(xùn)課件
- 員工出差安全培訓(xùn)課件
- 廣東19年的數(shù)學(xué)試卷
- 東港區(qū)初一今年數(shù)學(xué)試卷
- 《質(zhì)量管理體系成熟度評價指南》
- 教師違反師德的典型案例分析
- 《水利水電工程隧洞超前地質(zhì)預(yù)報規(guī)程》
- 競走培訓(xùn)課件
- 特殊教育學(xué)校課后服務(wù)安全制度
- T-CECA-G 0307-2024 數(shù)字化碳管理平臺 建設(shè)評價指南
- 侘寂風(fēng)設(shè)計元素解析
- 2024年河南省中等職業(yè)教化技能大賽汽車運用與修理類競賽方案
- 《經(jīng)皮椎弓根內(nèi)固定》課件
- 君樂寶在線測評題目
- 《園林快題設(shè)計》課件
評論
0/150
提交評論