版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章指針11.1變量的指針11.2指針變量11.3指針變量的使用11.4指針與數(shù)組11.5字符串與指針11.6指向函數(shù)的指針11.7返回指針值的函數(shù)11.8指針數(shù)組11.9鏈表11.10有關(guān)指針的數(shù)據(jù)類(lèi)型小結(jié)
11.1變?量?的?指?針
為了正確地訪問(wèn)這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編號(hào)。根據(jù)一個(gè)內(nèi)存單元的編號(hào)就可以準(zhǔn)確地找到該內(nèi)存單元。因此內(nèi)存區(qū)的每一個(gè)字節(jié)都有一個(gè)編號(hào),這就是地址,通俗地說(shuō),它相當(dāng)于旅館中的房間號(hào);在地址所標(biāo)志的內(nèi)存單元中存放數(shù)據(jù),這就相當(dāng)于每個(gè)房間中居住旅客一樣。內(nèi)存單元的地址與內(nèi)容兩個(gè)概念的區(qū)別如圖11.1所示。圖11.1內(nèi)存用戶(hù)數(shù)據(jù)區(qū)數(shù)據(jù)存儲(chǔ)示例
【例11-1】顯示變量的值及地址。圖11.2例11-1運(yùn)行結(jié)果
11.2指針變量
1.間接訪問(wèn)形式
假設(shè)定義了一個(gè)變量i_pointer,用來(lái)存放整型變量的地址,它被分配內(nèi)存地址為3010、3011的字節(jié)單元。可以通過(guò)下面的語(yǔ)句將i的地址(2000)存放到i_pointer中:
i_pointer=&i;
2.間接訪問(wèn)方式和直接訪問(wèn)方式的對(duì)比
例如,為了打開(kāi)A抽屜,有兩種辦法:一種是將A鑰匙隨身攜帶,需要時(shí)直接找出該鑰匙打開(kāi)抽屜,取出所需的東西;另一種辦法是將A鑰匙放到另一抽屜B中鎖起來(lái)。如果需要打開(kāi)A抽屜,就需要先找出B鑰匙,打開(kāi)B抽屜,取出A鑰匙,再打開(kāi)A抽屜,取出A抽屜中的物品,這就是間接訪問(wèn)。
圖11.3是直接訪問(wèn)和間接訪問(wèn)的示意圖。圖11.3直接訪問(wèn)和間接訪問(wèn)的示意圖
3.間接訪問(wèn)運(yùn)算符“*”
為了表示指針變量和它所指向的變量的聯(lián)系,在程序中用“*”符號(hào)表示“指向”關(guān)系。例如,i_pointer代表指針變量,而*i_pointer是i_pointer所指向的變量,如圖11.4所示。圖11.4指針變量示意圖
11.3指針變量的使用
11.3.1指針變量的定義
C語(yǔ)言規(guī)定所有變量在使用前必須定義,指定其類(lèi)型,并按此分配內(nèi)存單元。指針變量不同于整型變量和其他類(lèi)型的變量,它是專(zhuān)門(mén)用來(lái)存放地址的,必須將它定義為指針類(lèi)型。那么指針變量該如何定義呢?例如:
inti,j;
int*pointer_1,*pointer_2;圖11.5將變量地址存放到指針變量中11.3.2指針變量的引用
指針變量中只能存放地址(指針),不要將一個(gè)整型量(或任何其他非地址類(lèi)型的數(shù)據(jù))賦給一個(gè)指針變量。例如,下面的賦值是不合法的:
pointer_1=100;
/*pointer_1是指針變量,100為整數(shù)*/
【例11-2】通過(guò)指針變量訪問(wèn)整型變量。圖11.6例11-2運(yùn)行結(jié)果圖11.7例11-2示意圖11.3.3運(yùn)算符“&”和“*”的結(jié)合方向
【例11-3】輸入a和b兩個(gè)整數(shù),按先大后小的順序輸出a和b。圖11.8例11-3的運(yùn)行結(jié)果代碼說(shuō)明:當(dāng)輸入a=2,b=9時(shí),由于a<b,將p1和p2交換。交換前的情況如圖11.9(a)所示,交換后的情況如圖11.9(b)所示。圖11.9p1和p2交換前后示意圖11.3.4指針變量作函數(shù)參數(shù)
【例11-4】輸入兩個(gè)整數(shù),按大小輸出(指針變量作函數(shù)參數(shù))。圖11.10例11-4運(yùn)行結(jié)果圖11.11例11-3執(zhí)行過(guò)程中變量交換示意圖圖11.12值的單向傳遞圖11.13變量交換示意圖11.4指?針?與?數(shù)?組
11.4.1指向數(shù)組元素的指針
定義一個(gè)指向數(shù)組元素的指針變量的方法,與前面介紹的指向變量的指針變量相同。例如:
inta[10];/*定義a為包含10個(gè)整型數(shù)據(jù)的數(shù)組*/
int*p;/*定義p為指向整型變量的指針變量*/下面是給指針變量p賦值:
p=&a[0]; /*將a[0]元素的地址賦給指針變量p,
也就是說(shuō),指針變量p指向?數(shù)組下標(biāo)
為0的元素,如圖11.14所示*/圖11.14指向數(shù)組元素的指針11.4.2通過(guò)指針引用數(shù)組元素
假設(shè)p已被定義為指針變量,并已給它賦了一個(gè)地址,使它指向某一個(gè)數(shù)組元素。如果有以下賦值語(yǔ)句:
*p=1;
表示對(duì)p當(dāng)前所指向的數(shù)組元素賦予一個(gè)值(值為1)。圖11.15通過(guò)指針引用數(shù)組元素
【例11-5】使用指針變量來(lái)計(jì)算數(shù)組中所有元素的總和。圖11.16例11-5運(yùn)行結(jié)果11.4.3指向二維數(shù)組的指針變量
1.二維數(shù)組的地址表示
二維數(shù)組的首地址是這片連續(xù)存儲(chǔ)空間的起始地址,它既可以用數(shù)組名表示,也可以用數(shù)組中第一個(gè)元素的地址表示。假設(shè)有如下定義:
inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
2.二維數(shù)組的指針變量
二維數(shù)組指針變量的一般形式如下:
基類(lèi)型(*指針變量名)[長(zhǎng)度]
【例11-6】輸出二維數(shù)組任一行任一列元素的值。圖11.17例11-6運(yùn)行結(jié)果
11.5字符串與指針
11.5.1用字符數(shù)組表示字符串
將字符串的各個(gè)字符(包括串結(jié)束標(biāo)志?'\0')依次存放到字符數(shù)組中,利用下標(biāo)變量對(duì)數(shù)組進(jìn)行操作。
【例11-7】定義一個(gè)字符數(shù)組,對(duì)它進(jìn)行初始化,然后輸出該字符串。圖11.18例11-7運(yùn)行結(jié)果11.5.2用字符指針表示字符串
對(duì)字符串而言,可以不定義字符數(shù)組,而是直接定義指向字符串的指針變量,利用該指針變量對(duì)字符串進(jìn)行操作。
【例11-8】定義一個(gè)字符型指針變量,并對(duì)它進(jìn)行初始化,然后輸出該字符串。圖11.19例11-8運(yùn)行結(jié)果圖11.20字符指針處理字符串【例11-9】使用字符指針來(lái)確定字符串的長(zhǎng)度。圖11.21例11-9運(yùn)行結(jié)果
11.6指向函數(shù)的指針
與變量一樣,函數(shù)在內(nèi)存中也需要存儲(chǔ)地址。C語(yǔ)言允許定義一個(gè)指向函數(shù)的指針。該指針又可以作為一個(gè)參數(shù)在另一個(gè)函數(shù)中使用。
(1)指向函數(shù)的指針變量的定義:
數(shù)據(jù)類(lèi)型(*指針變量名)();
這里的數(shù)據(jù)類(lèi)型是指函數(shù)返回值的類(lèi)型。
(2)指向函數(shù)的指針變量的賦值:
指針變量名=函數(shù)名;
表示將函數(shù)的入口地址賦給指針變量。
(3)使用指針變量調(diào)用函數(shù):
(*指針變量名)(實(shí)際參數(shù)列表)
使用指向函數(shù)的指針變量調(diào)用函數(shù)時(shí),只需用(*指針變量名)代替函數(shù)名即可。
【例11-10】函數(shù)指針的綜合示例:使用函數(shù)指針作為函數(shù)參數(shù)。圖11.22例11-10運(yùn)行結(jié)果
11.7返回指針值的函數(shù)
一個(gè)函數(shù)可以帶回一個(gè)整型值、字符值、實(shí)型值等,也可以帶回指針型的數(shù)據(jù),即地址。這個(gè)概念與返回整型、字符型、實(shí)型值的函數(shù)概念類(lèi)似,只是返回的值是指針類(lèi)型
而已。
返回指針類(lèi)型數(shù)據(jù)的函數(shù)定義的一般形式如下:
類(lèi)型名 *函數(shù)名(參數(shù)列表)
【例11-11】返回指針值的函數(shù)。圖11.23例11-11運(yùn)行結(jié)果
11.8指針數(shù)組
11.8.1指針數(shù)組的概念
一個(gè)數(shù)組,其元素均為指針類(lèi)型的數(shù)據(jù),就稱(chēng)為指針數(shù)組,也就是說(shuō),指針數(shù)組中的每一個(gè)元素都是一個(gè)指針變量。一維指針數(shù)組定義的形式如下:
類(lèi)型名*數(shù)組名[數(shù)組長(zhǎng)度]例如:
int*p[4]; /*定義了一個(gè)一維指針數(shù)組p,包含4個(gè)整型指針*/
char*q[5]; /*定義了一個(gè)一維指針數(shù)組q,包含5個(gè)字符型指針*/圖11.24字符串?dāng)?shù)組與指針數(shù)組存儲(chǔ)字符串對(duì)比
【例11-12】將若干個(gè)字符串按字母順序(由小到大)輸出。圖11.25例11-12運(yùn)行結(jié)果11.8.2指針數(shù)組作main函數(shù)的形參
指針數(shù)組的一個(gè)重要應(yīng)用是作為main函數(shù)的形參。在以往的程序中,main函數(shù)的第一行一般寫(xiě)成以下形式:
main()
括號(hào)中是空的。實(shí)際上,main函數(shù)可以有形參,其參數(shù)形式如下所示:
main(intargc,char*argv[])命令行的一般形式為
命令名參數(shù)1參數(shù)2…參數(shù)n
命令名和各參數(shù)之間用空格分隔。例如,若有一目標(biāo)文件名為file1,要將兩個(gè)字符串“China”,“Beijing”作為傳送給main函數(shù)的參數(shù),可以寫(xiě)成以下形式:
file1ChinaBeijing圖11.26main函數(shù)的參數(shù)
【例11-13】指針數(shù)組作main函數(shù)的形參。圖11.27例11-13運(yùn)行結(jié)果
11.9鏈表
11.9.1鏈表概述
1.單鏈表結(jié)構(gòu)
鏈表根據(jù)需要開(kāi)辟內(nèi)存單元。圖11.28表示最簡(jiǎn)單的單向鏈表的結(jié)構(gòu)。圖11.28單鏈表結(jié)構(gòu)
2.鏈表中結(jié)點(diǎn)的結(jié)構(gòu)
可以看到,鏈表結(jié)點(diǎn)中要存放下一元素的地址,必須利用指針變量才能實(shí)現(xiàn)。第10章介紹的結(jié)構(gòu)體變量,用它作鏈表中的結(jié)點(diǎn)是最合適的。一個(gè)結(jié)構(gòu)體變量包含若干個(gè)成員,這些成員可以是數(shù)值類(lèi)型、字符類(lèi)型、數(shù)組類(lèi)型,也可以是指針類(lèi)型。例如,可以設(shè)計(jì)這樣一個(gè)結(jié)構(gòu)體類(lèi)型:圖11.29單鏈表結(jié)點(diǎn)結(jié)構(gòu)11.9.2處理動(dòng)態(tài)鏈表所需的函數(shù)
鏈表是動(dòng)態(tài)地分配存儲(chǔ)的,即在需要時(shí)才開(kāi)辟一個(gè)結(jié)點(diǎn)的存儲(chǔ)單元,不需要時(shí)釋放結(jié)點(diǎn)空間。怎樣動(dòng)態(tài)地開(kāi)辟和釋放存儲(chǔ)單元呢?C語(yǔ)言編譯系統(tǒng)的庫(kù)函數(shù)提供了以下有關(guān)
函數(shù):
(1)?malloc函數(shù)。其函數(shù)原型為:
void*malloc(unsignedintsize);
(2)?calloc函數(shù)。其函數(shù)原型為:
void*calloc(unsignedn,unsignedsize);
(3)?free函數(shù)。其函數(shù)原型為:
voidfree(void*p);
(4)?realloc函數(shù)。其函數(shù)原型為:
void*realloc(void*ptr,unsignedintsize)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年新興科技產(chǎn)業(yè)投資分析咨詢(xún)服務(wù)合同模板3篇
- 二零二五年度時(shí)尚服飾LOGO設(shè)計(jì)作品轉(zhuǎn)讓合同協(xié)議3篇
- 2024版次新房交易合同3篇
- 二零二五年度離婚協(xié)議按揭房產(chǎn)分割范本制作
- 二零二五年生物制藥廠勞務(wù)承包與藥品研發(fā)合同3篇
- 西安音樂(lè)學(xué)院《材料科學(xué)基礎(chǔ)雙語(yǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版板材購(gòu)銷(xiāo)合同標(biāo)準(zhǔn)范文
- 二零二五年度貨車(chē)車(chē)輛買(mǎi)賣(mài)與綠色物流推廣合同3篇
- 2024電商公司帶貨合同范本
- 二零二五版城市更新項(xiàng)目開(kāi)發(fā)委托管理及規(guī)劃設(shè)計(jì)服務(wù)協(xié)議3篇
- 2024年高級(jí)養(yǎng)老護(hù)理員職業(yè)鑒定考試題庫(kù)大全-下(多選、判斷題)
- 數(shù)學(xué)學(xué)科的重要性與應(yīng)用
- 【閱讀提升】部編版語(yǔ)文五年級(jí)下冊(cè)第二單元閱讀要素解析 類(lèi)文閱讀課外閱讀過(guò)關(guān)(含答案)
- 病理科醫(yī)院感染控制
- 購(gòu)銷(xiāo)合同電子版完整版
- 福建省福州市延安中學(xué)2023-2024學(xué)年八年級(jí)上學(xué)期期末物理模擬試卷+
- 2024年度醫(yī)院肝膽外科實(shí)習(xí)生帶教計(jì)劃課件
- 微機(jī)原理與接口技術(shù)考試試題及答案(綜合-必看)
- 勞務(wù)投標(biāo)技術(shù)標(biāo)
- 研發(fā)管理咨詢(xún)項(xiàng)目建議書(shū)
- 轉(zhuǎn)錢(qián)委托書(shū)授權(quán)書(shū)范本
評(píng)論
0/150
提交評(píng)論