c語言指針(總結(jié))_第1頁
c語言指針(總結(jié))_第2頁
c語言指針(總結(jié))_第3頁
c語言指針(總結(jié))_第4頁
c語言指針(總結(jié))_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第11章章 指針指針C程序設(shè)計(jì)飛快進(jìn)階大學(xué)教程程序設(shè)計(jì)飛快進(jìn)階大學(xué)教程第第11章章 指針指針本章要點(diǎn)本章要點(diǎn)指針概念指針概念指針與數(shù)組指針與數(shù)組指針與函數(shù)指針與函數(shù)字符串字符串動(dòng)態(tài)空間經(jīng)管動(dòng)態(tài)空間經(jīng)管11 指針指針學(xué)問點(diǎn)學(xué)問點(diǎn)指針概念指針概念指向數(shù)組的指針、指針數(shù)組指向數(shù)組的指針、指針數(shù)組指針做指標(biāo)、指針做為函數(shù)值、指向函數(shù)的指針指針做指標(biāo)、指針做為函數(shù)值、指向函數(shù)的指針字符串字符串動(dòng)態(tài)空間經(jīng)管動(dòng)態(tài)空間經(jīng)管11.1 懂得指針懂得指針當(dāng)咨詢路時(shí)當(dāng)咨詢路時(shí),常常聽到如此的答復(fù)常常聽到如此的答復(fù):“向前走過向前走過3個(gè)路個(gè)路口右轉(zhuǎn)口右轉(zhuǎn),再過兩個(gè)路口左轉(zhuǎn)再過兩個(gè)路口左轉(zhuǎn),再前行再前行200米米.”

2、當(dāng)在圖書館中尋一本時(shí)當(dāng)在圖書館中尋一本時(shí),常常是如此尋常常是如此尋:“第五排書架第五排書架,從上向下數(shù)第二層從上向下數(shù)第二層,左數(shù)第左數(shù)第6本本.” 老師提咨詢學(xué)生老師提咨詢學(xué)生,在不明白學(xué)生姓名的情況下在不明白學(xué)生姓名的情況下,常常常常講講:“第第4排左數(shù)第二個(gè)同學(xué)排左數(shù)第二個(gè)同學(xué).” 上述例子講明對(duì)一個(gè)事務(wù)的會(huì)見上述例子講明對(duì)一個(gè)事務(wù)的會(huì)見,當(dāng)不能夠通過當(dāng)不能夠通過標(biāo)題直截了當(dāng)會(huì)見標(biāo)題直截了當(dāng)會(huì)見,只能夠通過其位置履行會(huì)見只能夠通過其位置履行會(huì)見. C程序同樣的事理程序同樣的事理,前面的章節(jié)對(duì)信息的會(huì)見是前面的章節(jié)對(duì)信息的會(huì)見是通過變量標(biāo)題實(shí)現(xiàn)的通過變量標(biāo)題實(shí)現(xiàn)的,但是但是,有時(shí)侯不明白其

3、標(biāo)題有時(shí)侯不明白其標(biāo)題,甚甚到其沒有標(biāo)題到其沒有標(biāo)題,這時(shí)侯只能通過該信息所在的地址這時(shí)侯只能通過該信息所在的地址履行會(huì)見履行會(huì)見.11.2 指向變量的指針指向變量的指針C語言中定義一個(gè)變量時(shí)語言中定義一個(gè)變量時(shí),例似例似: int i1=3;描述了變量相關(guān)的描述了變量相關(guān)的3角度的屬性角度的屬性:值、地址、值、地址、類型類型.1. 值為值為3,通過變量會(huì)見通過變量會(huì)見,似似i1+52. 地址為地址為0012ff78(32位機(jī)器位機(jī)器,0012ff78為為16進(jìn)制數(shù))進(jìn)制數(shù)),占用占用內(nèi)存空間的位置內(nèi)存空間的位置,通過通過&i1會(huì)見會(huì)見,&在在scanf語句中使用過語句中使用過

4、.3. 類型為類型為int,決意了其能夠介入的運(yùn)算決意了其能夠介入的運(yùn)算,同時(shí)也決意了其占用同時(shí)也決意了其占用空間的大?。◤钠鹗嫉刂纷钕日加玫慕舆B字節(jié)數(shù))空間的大小(從起始地址最先占用的接連字節(jié)數(shù)),占占用空間的大小通過用空間的大小通過sizeof運(yùn)算符運(yùn)算符,在在vc中中sizeof(i1)為為4個(gè)個(gè)字節(jié)字節(jié).11.2 指向變量的指針指向變量的指針把變量把變量i1的地址存放于指針變量的地址存放于指針變量pi1中中 11.2.1 指針變量的定義指針變量的定義指針變量定義的一樣形式為指針變量定義的一樣形式為: 類型講明符類型講明符 *變量名變量名;例似例似:int *pi1;對(duì)指針變量的定義包羅

5、三個(gè)內(nèi)容對(duì)指針變量的定義包羅三個(gè)內(nèi)容:1. 指針類型講明指針類型講明,*示意這是一個(gè)指針變量;示意這是一個(gè)指針變量;2. 指針變量名指針變量名,pi1為指針變量名;為指針變量名;3. 指針?biāo)赶虻淖兞康男畔㈩愋椭羔標(biāo)赶虻淖兞康男畔㈩愋?int為指針變量所指向的變?yōu)橹羔樧兞克赶虻淖兞康男畔㈩愋土康男畔㈩愋?講明講明pi1只能儲(chǔ)存整型變量的地址只能儲(chǔ)存整型變量的地址.再似再似:float *pf1; *pf1是指向浮點(diǎn)變量的指針變量是指向浮點(diǎn)變量的指針變量*char *pc1 *pc1是指向字符變量的指針變量是指向字符變量的指針變量*11.2.2 指針變量的引用指針變量的引用 指針變量同一樣變

6、量一樣指針變量同一樣變量一樣,使用之前不僅要定使用之前不僅要定義講明義講明,并且必須賦予具體的值并且必須賦予具體的值. 未經(jīng)賦值的指針變量不能使用未經(jīng)賦值的指針變量不能使用,否那么將造成否那么將造成系統(tǒng)雜亂系統(tǒng)雜亂,甚到死機(jī)甚到死機(jī).(咨詢路時(shí)不人告知你一個(gè)不(咨詢路時(shí)不人告知你一個(gè)不存在的地址存在的地址,會(huì)如何樣?)會(huì)如何樣?)11.2.2 指針變量的引用指針變量的引用 和指針相關(guān)有兩個(gè)運(yùn)算符和指針相關(guān)有兩個(gè)運(yùn)算符&和和*:1. &:取地址運(yùn)算符取地址運(yùn)算符.其一樣形式為其一樣形式為: &變量名變量名 取一個(gè)內(nèi)存變量的地址取一個(gè)內(nèi)存變量的地址.2. *:指針運(yùn)算符(或

7、稱指針運(yùn)算符(或稱“間接會(huì)見間接會(huì)見” 運(yùn)算符)運(yùn)算符).其一樣形式為其一樣形式為: *指針變量名指針變量名通過指針變量間接會(huì)見指針變量所指向變量的信息通過指針變量間接會(huì)見指針變量所指向變量的信息.int i1; int * pi1; pi1=&i1;int i2=*pi1+1; 此處此處*代表間接會(huì)見運(yùn)算符代表間接會(huì)見運(yùn)算符,取指針變量取指針變量pi1所指向的變量所指向的變量i1的值(對(duì)的值(對(duì)i1間接會(huì)見)加間接會(huì)見)加1賦值給變量賦值給變量i2.此語句結(jié)論完全此語句結(jié)論完全等價(jià)于等價(jià)于: int i2=i1+1;11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:

8、1. 對(duì)對(duì)*要區(qū)不類型講明符與間接會(huì)見符要區(qū)不類型講明符與間接會(huì)見符.2. 不能用一個(gè)數(shù)給指針變量賦值不能用一個(gè)數(shù)給指針變量賦值,下面賦值是錯(cuò)誤的下面賦值是錯(cuò)誤的:int *pi1; pi1=20;但是但是,指針可用指針可用0賦值賦值,代表空指針代表空指針,哪里也不指向哪里也不指向.3. 給指針變量賦值時(shí)給指針變量賦值時(shí),指針變量前不能加指針變量前不能加“*”講明符講明符,下面的寫下面的寫法是錯(cuò)誤的法是錯(cuò)誤的: int i1; int *pi1; *pi1=&i1;指針變量指針變量pi1前面加前面加*便代表間接會(huì)見了便代表間接會(huì)見了,代表代表i 指針變量的引用指針變量的

9、引用指針變量講明指針變量講明:4. 指針變量未指向具體有效地址指針變量未指向具體有效地址,間接會(huì)見會(huì)有咨詢題間接會(huì)見會(huì)有咨詢題 int *pi1; * 指針變量指針變量pi1未賦值未賦值,不明白指向哪里不明白指向哪里* *pi1=200; * 向向pi1所指向的地址空間賦值所指向的地址空間賦值200 *(隨機(jī)給你一個(gè)賬戶(隨機(jī)給你一個(gè)賬戶,存鈔票后如何取呢?)存鈔票后如何取呢?)推斷一個(gè)指針變量是否指向有效空間推斷一個(gè)指針變量是否指向有效空間:int *pi1=0;if(pi1!=0) *pi1=200;省略號(hào)部分省略號(hào)部分,如果未使如果未使pi1指向有效空間指向有效空間,這對(duì)這對(duì)*pil的賦

10、值便不大的賦值便不大概履行概履行.11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:5. 指針變量的值是能夠改變的指針變量的值是能夠改變的int i1=3,i2=4,*pi1;pi1=&i1;i2=i2+*pi1;11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:5. 指針變量的值是能夠改變的指針變量的值是能夠改變的pi1=&i2;改變指針變量改變指針變量pi1指向指向i2 11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:5.指針變量只能用同類型的地址賦值指針變量只能用同類型的地址賦值float *pf1; *pf1是指向

11、浮點(diǎn)變量的指針變量是指向浮點(diǎn)變量的指針變量*char c1; *字符變量字符變量*pf1=&c1;pf1只能存儲(chǔ)只能存儲(chǔ)float信息的地址信息的地址,用字符型信息地址賦值是錯(cuò)誤的用字符型信息地址賦值是錯(cuò)誤的.11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:7. 同類型指針變量間能夠彼此賦值同類型指針變量間能夠彼此賦值例例11.1 交流指針變量交流指針變量#include int main() int i1=3,i2=4; int *pi1,*pi2,*pi3; pi1=&i1; pi2=&i2;pi3=0; *交流指針變量交流指針變量* pi3=p

12、i1; pi1=pi2; pi2=pi3; printf(i1=%dni2=%dn,i1,i2); printf(*pi1=%dn*pi2=%dn,*pi1,*pi2); return 0; 程序運(yùn)行結(jié)論程序運(yùn)行結(jié)論:i1=3i2=4*pi1=4*pi2=311.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:7. 同類型指針變量間能夠彼此賦值同類型指針變量間能夠彼此賦值例例11.1 交流指針變量交流指針變量11.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:7. 同類型指針變量間能夠彼此賦值同類型指針變量間能夠彼此賦值例例11.2 交流指針變量所指向的信息交流指

13、針變量所指向的信息#include int main() int i1=3,i2=4; int *pi1,*pi2; int iTemp=0; pi1=&i1; pi2=&i2; *交流指針變量所指向的信息交流指針變量所指向的信息* iTemp=*pi1; *pi1=*pi2; *pi2=iTemp; printf(i1=%dni2=%dn,i1,i2); printf(*pi1=%dn*pi2=%dn,*pi1,*pi2); return 0;程序運(yùn)行結(jié)論程序運(yùn)行結(jié)論:i1=4i2=3*pi1=4*pi2=311.2.2 指針變量的引用指針變量的引用指針變量講明指針變量講明:

14、7. 同類型指針變量間能夠彼此賦值同類型指針變量間能夠彼此賦值例例11.2 交流指針變量所指向的信息交流指針變量所指向的信息11.3 數(shù)組與指針數(shù)組與指針 一個(gè)變量有一個(gè)地址一個(gè)變量有一個(gè)地址,一個(gè)數(shù)組見諒如果干元素一個(gè)數(shù)組見諒如果干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有它們都有相應(yīng)的地址相應(yīng)的地址.所謂數(shù)組的指針是指數(shù)組的起始地址所謂數(shù)組的指針是指數(shù)組的起始地址,數(shù)組元素的指針是數(shù)組元素的地址數(shù)組元素的指針是數(shù)組元素的地址. 對(duì)數(shù)組元素也能夠采納指針履行會(huì)見對(duì)數(shù)組元素也能夠采納指針履行會(huì)見,功效相對(duì)功效相對(duì)更高更高.11.3.1 一維數(shù)組與指針一

15、維數(shù)組與指針一個(gè)數(shù)組是由接連的一塊內(nèi)存單元組成的一個(gè)數(shù)組是由接連的一塊內(nèi)存單元組成的.數(shù)組名便是這塊接連內(nèi)存單元的首地址(常量)數(shù)組名便是這塊接連內(nèi)存單元的首地址(常量).int iArr5=1,2,3,4,5; int *pi; pi=&iArr0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針 C語言規(guī)定語言規(guī)定,數(shù)組名代表數(shù)組的首地址數(shù)組名代表數(shù)組的首地址,也便是也便是第第0號(hào)元素的地址號(hào)元素的地址.所以所以,下面兩個(gè)語句等價(jià)下面兩個(gè)語句等價(jià): pi=&iArr0; pi=iArr; iArr數(shù)組名是整型常量地址數(shù)組名是整型常量地址 int i; iArr=&i;*不

16、能夠不能夠,因?yàn)橐驗(yàn)閕Arr為常量為常量*11.3.1 一維數(shù)組與指針一維數(shù)組與指針1. 指針相關(guān)的運(yùn)算符指針相關(guān)的運(yùn)算符(1) 取地址運(yùn)算符取地址運(yùn)算符&:單目運(yùn)算符單目運(yùn)算符(注重其優(yōu)先級(jí)注重其優(yōu)先級(jí)),其聯(lián)合性為自右到左其聯(lián)合性為自右到左,其功能是取變量的地址其功能是取變量的地址.(2) 間接會(huì)見運(yùn)算符間接會(huì)見運(yùn)算符*:單目運(yùn)算符單目運(yùn)算符,其聯(lián)合性為自其聯(lián)合性為自右到左右到左,用來示意指針變量所指的變量用來示意指針變量所指的變量.(3) 賦值運(yùn)算符賦值運(yùn)算符=:能夠給指針變量賦值能夠給指針變量賦值.(4) 算術(shù)運(yùn)算符算術(shù)運(yùn)算符+、-、+、-. +:地址表達(dá)式(地址表達(dá)式(pi)

17、+ 整型表達(dá)式(整型表達(dá)式(in),結(jié)結(jié)論為在論為在pi地址值位置躍過地址值位置躍過in(pi所指類型字節(jié)所指類型字節(jié)數(shù))個(gè)字節(jié)后的地址數(shù))個(gè)字節(jié)后的地址.11.3.1 一維數(shù)組與指針一維數(shù)組與指針1. 指針相關(guān)的運(yùn)算符指針相關(guān)的運(yùn)算符-:地址表達(dá)式(地址表達(dá)式(pi)- 整型表達(dá)式(整型表達(dá)式(in),結(jié)論為在結(jié)論為在pi地址值位置跳回地址值位置跳回in(pi所指類型字節(jié)數(shù))個(gè)所指類型字節(jié)數(shù))個(gè)字節(jié)后的地址字節(jié)后的地址.-:地址表達(dá)式(地址表達(dá)式(pi1)-地址表達(dá)式(地址表達(dá)式(pi12),結(jié)論為結(jié)論為在在pi2和和pi1相差的字節(jié)數(shù)相差的字節(jié)數(shù)(pi1所指類型字節(jié)所指類型字節(jié)數(shù))數(shù)).p

18、i1與與pi2必須指向一樣信息類型必須指向一樣信息類型.+:地址變量(地址變量(pi)+ 大概大概 +地址變量(地址變量(pi),結(jié)論結(jié)論為在為在pi地址值位置躍過地址值位置躍過pi所指類型字節(jié)數(shù)個(gè)字所指類型字節(jié)數(shù)個(gè)字節(jié)后的地址節(jié)后的地址.分前分前+和后和后+.-:地址變量(地址變量(pi)- 大概大概 -地址變量(地址變量(pi),結(jié)論為結(jié)論為在在pi地址值位置跳回地址值位置跳回pi所指類型字節(jié)數(shù)個(gè)字節(jié)所指類型字節(jié)數(shù)個(gè)字節(jié)后的地址后的地址.分前分前-和后和后-.11.3.1 一維數(shù)組與指針一維數(shù)組與指針1. 指針相關(guān)的運(yùn)算符指針相關(guān)的運(yùn)算符(5) 關(guān)系運(yùn)算關(guān)系運(yùn)算.撐持撐持6種關(guān)系運(yùn)算符種關(guān)

19、系運(yùn)算符,用來對(duì)比地址的用來對(duì)比地址的大小大小.例似例似:&iArr1 &iArr3 為真;為真;piiArr+3為真(為真(pi的值為的值為iArr).11.3.1 一維數(shù)組與指針一維數(shù)組與指針1. 指針相關(guān)的運(yùn)算符指針相關(guān)的運(yùn)算符(5) 關(guān)系運(yùn)算關(guān)系運(yùn)算.int iArr5=0,1,2,3,4; int *pi,*pi1,*pi2; pi=&iArr1; pi1=&iArr2; pi2=&iArr4;*pi+:因?yàn)橐驗(yàn)?和和*同優(yōu)先級(jí)同優(yōu)先級(jí),聯(lián)合方向自右而左聯(lián)合方向自右而左,等價(jià)等價(jià)于于*(pi+).先對(duì)先對(duì)*pi,接著接著pi加加1.表達(dá)式的值為

20、表達(dá)式的值為iArr1,pi的值為的值為&iArr2.*+pi:等價(jià)于等價(jià)于*(+pi).先先pi加加1,接著接著*pi.表達(dá)式的值表達(dá)式的值為為iArr2,pi的值為的值為&iArr2. (*pi)+:先先*pi,接著(接著(*pi)加)加1.表達(dá)式的值為表達(dá)式的值為iArr1+,iArr1的值改變了的值改變了,pi的值為的值為&iArr1,pi的值未改變的值未改變. pi2-pi1:pi2和和pi1相差兩個(gè)整型數(shù)所占字節(jié)數(shù)的大相差兩個(gè)整型數(shù)所占字節(jié)數(shù)的大小小,它的返回值不是相差字節(jié)數(shù)它的返回值不是相差字節(jié)數(shù),而是相差整數(shù)的個(gè)而是相差整數(shù)的個(gè)數(shù)數(shù),所以值為所以值為2.

21、 上述算術(shù)運(yùn)算符對(duì)簡單變量地址運(yùn)就是無意義的上述算術(shù)運(yùn)算符對(duì)簡單變量地址運(yùn)就是無意義的,因?yàn)橐驗(yàn)閷?duì)一個(gè)簡單變量對(duì)一個(gè)簡單變量x,&x+5統(tǒng)計(jì)的結(jié)論地址不明白是統(tǒng)計(jì)的結(jié)論地址不明白是哪個(gè)信息的地址哪個(gè)信息的地址.而數(shù)組空間是接連的而數(shù)組空間是接連的,對(duì)一個(gè)數(shù)組對(duì)一個(gè)數(shù)組arr,arr+5便是便是arr5的地址的地址. 11.3.1 一維數(shù)組與指針一維數(shù)組與指針1. 指針相關(guān)的運(yùn)算符指針相關(guān)的運(yùn)算符(5) 關(guān)系運(yùn)算關(guān)系運(yùn)算.int iArr5=0,1,2,3,4; int *pi,*pi1,*pi2; pi=&iArr1; pi1=&iArr2; pi2=&iArr

22、4;*pi+:因?yàn)橐驗(yàn)?和和*同優(yōu)先級(jí)同優(yōu)先級(jí),聯(lián)合方向自右而左聯(lián)合方向自右而左,等價(jià)等價(jià)于于*(pi+).先對(duì)先對(duì)*pi,接著接著pi加加1.表達(dá)式的值為表達(dá)式的值為iArr1,pi的值為的值為&iArr2.*+pi:等價(jià)于等價(jià)于*(+pi).先先pi加加1,接著接著*pi.表達(dá)式的值表達(dá)式的值為為iArr2,pi的值為的值為&iArr2. (*pi)+:先先*pi,接著(接著(*pi)加)加1.表達(dá)式的值為表達(dá)式的值為iArr1+,iArr1的值改變了的值改變了,pi的值為的值為&iArr1,pi的值未改變的值未改變. pi2-pi1:pi2和和pi1相差兩個(gè)整型數(shù)

23、所占字節(jié)數(shù)的大相差兩個(gè)整型數(shù)所占字節(jié)數(shù)的大小小,它的返回值不是相差字節(jié)數(shù)它的返回值不是相差字節(jié)數(shù),而是相差整數(shù)的個(gè)而是相差整數(shù)的個(gè)數(shù)數(shù),所以值為所以值為2. 上述算術(shù)運(yùn)算符對(duì)簡單變量地址運(yùn)就是無意義的上述算術(shù)運(yùn)算符對(duì)簡單變量地址運(yùn)就是無意義的,因?yàn)橐驗(yàn)閷?duì)一個(gè)簡單變量對(duì)一個(gè)簡單變量x,&x+5統(tǒng)計(jì)的結(jié)論地址不明白是統(tǒng)計(jì)的結(jié)論地址不明白是哪個(gè)信息的地址哪個(gè)信息的地址.而數(shù)組空間是接連的而數(shù)組空間是接連的,對(duì)一個(gè)數(shù)組對(duì)一個(gè)數(shù)組arr,arr+5便是便是arr5的地址的地址. 11.3.1 一維數(shù)組與指針一維數(shù)組與指針2.引用數(shù)組元素引用數(shù)組元素 int iArr5=1,2,3,4,5; in

24、t *pi; pi=iArr;(1) pi+i1和和iArr+i1便是便是iArri1的地址的地址,大概講它們大概講它們指向指向iArr數(shù)組的第數(shù)組的第i個(gè)元素個(gè)元素.(2) *(pi+i1)或或*( iArr+i1)便是便是pi+i1或或iArr+i1所指向所指向的數(shù)組元素的數(shù)組元素,即即iArr i1.例似例似,*(pi+2)或或*(iArr+2)便便是是iArr2.(3) 指向數(shù)組指針變量能夠帶下標(biāo)指向數(shù)組指針變量能夠帶下標(biāo),似似pii1與與*(pi+i1)等價(jià)等價(jià).引入指針變量后引入指針變量后,對(duì)數(shù)組對(duì)數(shù)組iArr,pi是指向數(shù)組的指針變量是指向數(shù)組的指針變量,其初值其初值pi=iAr

25、r.便能夠用兩種方式來會(huì)見數(shù)組元素便能夠用兩種方式來會(huì)見數(shù)組元素:(1) 下標(biāo)法下標(biāo)法,即用即用iArri1形式會(huì)見數(shù)組元素形式會(huì)見數(shù)組元素,也能夠也能夠用用pii1會(huì)見數(shù)組元素會(huì)見數(shù)組元素.(2) 指針法指針法,即采納即采納*(iArr+i1)或或*(pi+i1)形式形式,用間接用間接會(huì)見的方式來會(huì)見數(shù)組元素會(huì)見的方式來會(huì)見數(shù)組元素.11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.3 數(shù)組元素賦值同時(shí)輸出(數(shù)組名下標(biāo)法)數(shù)組元素賦值同時(shí)輸出(數(shù)組名下標(biāo)法)#include int main() int iArr5,i1; for(i1=0;i15;i1+) iArri1=i1; for(

26、i1=0;i15;i1+) printf(iArr%d=%dn,i1,iArri1); return 0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.4 數(shù)組元素賦值同時(shí)輸出(指針變量下標(biāo)法)數(shù)組元素賦值同時(shí)輸出(指針變量下標(biāo)法)#include int main() int iArr5,i1; int *pi=iArr; *pi為變量為變量,iArr為常量為常量* for(i1=0;i15;i1+) pii1=i1; for(i1=0;i15;i1+) printf(iArr%d=%dn,i1,pii1); return 0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.5 數(shù)

27、組元素賦值同時(shí)輸出(數(shù)組名指針法)數(shù)組元素賦值同時(shí)輸出(數(shù)組名指針法)#include int main() int iArr5,i1; for(i1=0;i15;i1+) *(iArr+i1)=i1; for(i1=0;i15;i1+) printf(iArr%d=%dn,i1,*(iArr+i1); return 0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.6 數(shù)組元素賦值同時(shí)輸出(指針變量指針法)數(shù)組元素賦值同時(shí)輸出(指針變量指針法)#include int main() int iArr5,i1; int *pi=iArr; for(i1=0;i15;i1+) *(pi+i

28、1)=i1; for(i1=0;i15;i1+) printf(iArr%d=%dn,i1,*(pi+i1); return 0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.7 數(shù)組元素賦值同時(shí)輸出(指針變量指針移動(dòng)數(shù)組元素賦值同時(shí)輸出(指針變量指針移動(dòng)法)法)#include int main() int iArr5,i1; int *pi=iArr; for(i1=0;i15;i1+) *pi=i1; pi+; *此刻此刻,pi差不多指向差不多指向iArr4之后之后,輸出數(shù)組元素輸出數(shù)組元素,pi再再一次指回?cái)?shù)組頭部一次指回?cái)?shù)組頭部* pi=iArr; for(i1=0;i15;i

29、1+) printf(iArr%d=%dn,i1,*pi);pi+; return 0;11.3.1 一維數(shù)組與指針一維數(shù)組與指針例例11.8 數(shù)組元素賦值同時(shí)輸出(指針變量關(guān)系運(yùn)算指針法)數(shù)組元素賦值同時(shí)輸出(指針變量關(guān)系運(yùn)算指針法)#include int main() int iArr5,i1=0; int *pi=iArr; for(;piiArr+5;pi+,i1+)*pi=i1; *此刻此刻,pi差不多指向差不多指向iArr4之后之后,為下面輸出數(shù)組為下面輸出數(shù)組,必須讓必須讓pi再一次指回?cái)?shù)組頭部再一次指回?cái)?shù)組頭部* pi=iArr;i1=0; for(;piiArr+5;pi+

30、,i1+) printf(iArr%d=%dn,i1,*pi); return 0;11.3.2 二維數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組懂得二維數(shù)組 C語言對(duì)二維數(shù)組的存儲(chǔ)是行優(yōu)先方式的語言對(duì)二維數(shù)組的存儲(chǔ)是行優(yōu)先方式的,對(duì)整型二對(duì)整型二維數(shù)組維數(shù)組iA iArr34=1,2,3,4,5,6,7,8,9,10,11,1211.3.2 二維數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組懂得二維數(shù)組一個(gè)二維數(shù)組是以一維數(shù)組為元素組織的一維數(shù)組一個(gè)二維數(shù)組是以一維數(shù)組為元素組織的一維數(shù)組,也也便是二維數(shù)組能夠看作一維數(shù)組便是二維數(shù)組能夠看作一維數(shù)組,只只是該一維數(shù)只只是該一維數(shù)組的每

31、個(gè)元素又是一個(gè)一維數(shù)組組的每個(gè)元素又是一個(gè)一維數(shù)組.似似iArr,把把iArr當(dāng)當(dāng)作一維數(shù)組看待作一維數(shù)組看待,iArr有有3個(gè)元素個(gè)元素,分不為分不為iArr0,iArr1,iArr2,每個(gè)元素是一個(gè)有每個(gè)元素是一個(gè)有4個(gè)整型個(gè)整型元素構(gòu)成的一維數(shù)組元素構(gòu)成的一維數(shù)組.11.3.2 二維數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組懂得二維數(shù)組iArri1有兩層含義有兩層含義,它既是它既是“一維數(shù)組一維數(shù)組iArr”的數(shù)組元的數(shù)組元素素,又是一維數(shù)組名又是一維數(shù)組名.iArr1是數(shù)組是數(shù)組iArr的一個(gè)數(shù)組元素;的一個(gè)數(shù)組元素;同時(shí)同時(shí),iArr1是一個(gè)一維數(shù)組名是一個(gè)一維數(shù)組名,含有含有iAr

32、r10,iArr11,iArr12,iArr13四個(gè)元素四個(gè)元素.11.3.2 二維數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組(對(duì)比一維)懂得二維數(shù)組(對(duì)比一維)對(duì)一維數(shù)組對(duì)一維數(shù)組:int iArr14=11,12,13,14;iArr1是一個(gè)其數(shù)組元素類型的常量地址是一個(gè)其數(shù)組元素類型的常量地址,即即int型的常型的常量地址量地址,那么那么iArr1+1的值會(huì)躍過一個(gè)數(shù)組元素的值會(huì)躍過一個(gè)數(shù)組元素,即即躍過躍過4個(gè)字節(jié)(假定一個(gè)個(gè)字節(jié)(假定一個(gè)int,4個(gè)字節(jié))個(gè)字節(jié)).對(duì)當(dāng)作一維數(shù)組的對(duì)當(dāng)作一維數(shù)組的“iArr”,iArr是一個(gè)其數(shù)組元素類型是一個(gè)其數(shù)組元素類型的常量地址的常量地址,它的

33、數(shù)組元素為它的數(shù)組元素為iArri1(iArri1為為4個(gè)個(gè)int類型的一維數(shù)組)類型的一維數(shù)組),所以所以iArr為大小為為大小為4的一的一維整型數(shù)組型的常量地址維整型數(shù)組型的常量地址,那么那么iArr+1的值會(huì)躍過的值會(huì)躍過一個(gè)數(shù)組元素一個(gè)數(shù)組元素,即躍過大小為即躍過大小為4的一維整型數(shù)組的一維整型數(shù)組(一行(一行,16個(gè)字節(jié)個(gè)字節(jié),假定一個(gè)假定一個(gè)int為為4個(gè)字節(jié))個(gè)字節(jié)).所以所以也把也把iArr稱為行地址稱為行地址.11.3.2 二維數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組(對(duì)比一維)懂得二維數(shù)組(對(duì)比一維)在一維數(shù)組中在一維數(shù)組中iArr1中中,iArr1i1等價(jià)于等價(jià)于*(

34、iArr1+i1),代代表取出第表取出第i1個(gè)元素個(gè)元素.在二維數(shù)組在二維數(shù)組iArr中中,iArri1也等價(jià)于也等價(jià)于*(iArr+i1),iArri1和和*( iArr+i1)是一維數(shù)組的數(shù)組名和首地址是一維數(shù)組的數(shù)組名和首地址.因?yàn)橐驗(yàn)閕Arri1和和*(iArr+i1)為一維數(shù)組為一維數(shù)組,為整數(shù)類型常量為整數(shù)類型常量地址地址,所以所以iArri1+1和和*(iArr+i1)+1都會(huì)躍過一個(gè)都會(huì)躍過一個(gè)整型信息(一列整型信息(一列,4個(gè)字節(jié)個(gè)字節(jié),假定一個(gè)假定一個(gè)int為為4個(gè)字個(gè)字節(jié))節(jié)),所以所以,也把也把iArri1和和*(iArr+i1)稱為列地址稱為列地址.11.3.2 二維

35、數(shù)組與指針二維數(shù)組與指針1. 懂得二維數(shù)組(對(duì)比一維)懂得二維數(shù)組(對(duì)比一維)行地址(一維數(shù)組地址)行地址(一維數(shù)組地址),一次躍過一行一次躍過一行,似似iArr、iArr+i1、 &iArri1、&*(iArr+i1);列地址(信息元素)列地址(信息元素),一次躍過一列一次躍過一列,似似 *iArr、*(iArr+i1)、iArri1.*(*(iArr+1)+2): iArr+1一行指針,*(iArr+1)一列指針,*(iArr+1)+2 一行二列地址,*(*(iArr+1)+2) 一行二列地址間接會(huì)見到iArr12,值為7. 11.3.2 二維數(shù)組與指針二維數(shù)組與指針例例1

36、1.9 行列地址行列地址#include int main() int iArr34=1,2,3,4,5,6,7,8,9,10,11,12; *行地址行地址* printf(行地址行地址n); printf(iArr=%x , ,iArr); printf(iArr+1=%xn,iArr+1); printf(&iArr0=%x , ,&iArr0); printf(&iArr0+1=%xn,&iArr0+1); printf(&*(iArr+0)=%x , ,&*(iArr+0); printf(&*(iArr+0)+1=%xn,&am

37、p;*(iArr+0)+1); *列地址列地址* printf(列地址列地址n); printf(*iArr=%x , ,*iArr); printf(*iArr+1=%xn,*iArr+1); printf(iArr0=%x , ,iArr0); printf(iArr0+1=%xn,iArr0+1); printf(*(iArr+0)=%x , ,*(iArr+0); printf(*(iArr+0)+1=%xn,*(iArr+0)+1);程序運(yùn)行結(jié)論程序運(yùn)行結(jié)論:行地址行地址iArr=12ff50 , iArr+1=12ff60&iArr0=12ff50 , &iArr0

38、+1=12ff60&*(iArr+0)=12ff50 , &*(iArr+0)+1=12ff60列地址列地址*iArr=12ff50 , *iArr+1=12ff54iArr0=12ff50 , iArr0+1=12ff54*(iArr+0)=12ff50 , *(iArr+0)+1=12ff54信息元素信息元素iArr12=7 *會(huì)見元素會(huì)見元素* printf(信息元素信息元素n); printf(iArr12=%dn,*(*(iArr+1)+2); return 0;11.3.2 二維數(shù)組與指針二維數(shù)組與指針2.指向一維數(shù)組的指針指向一維數(shù)組的指針 對(duì)一維數(shù)組對(duì)一維數(shù)組i

39、nt iArr14;能夠把能夠把iArr賦值給指向賦值給指向int型的指針變量型的指針變量.似似:int *pi1; pi1=iArr1;對(duì)二維數(shù)組對(duì)二維數(shù)組int iArr34=1,2,3,4,5,6,7,8,9,10,11,12;同樣能夠把同樣能夠把iArr賦值給指向一維數(shù)組的指針變量賦值給指向一維數(shù)組的指針變量,因?yàn)橐驗(yàn)槎S數(shù)組能夠算作以一維數(shù)組為成員的一維數(shù)組二維數(shù)組能夠算作以一維數(shù)組為成員的一維數(shù)組.int (*pia)4;它示意它示意pia是一個(gè)指針變量是一個(gè)指針變量,它指向見諒它指向見諒4個(gè)元素的一維個(gè)元素的一維數(shù)組數(shù)組.接著便能夠賦值接著便能夠賦值:pia=iArr;11.3.

40、2 二維數(shù)組與指針二維數(shù)組與指針2.指向一維數(shù)組的指針指向一維數(shù)組的指針 pia指向第一個(gè)一維數(shù)組指向第一個(gè)一維數(shù)組iArr0,其值等于其值等于iArr.而而pia+1那么指向一維數(shù)組那么指向一維數(shù)組iArr1.早年面的行列地址對(duì)比早年面的行列地址對(duì)比可獵取可獵取*(pia+iRow)+iCol是二維數(shù)組是二維數(shù)組iRow行行iCol 列的元素的地址列的元素的地址,而而*(*(pia+iRow)+iCol)那么是那么是iRow行行iCol列元素的值列元素的值.11.3.2 二維數(shù)組與指針二維數(shù)組與指針2.指向一維數(shù)組的指針指向一維數(shù)組的指針 指向一維數(shù)組的指針變量定義的一樣形式為指向一維數(shù)組的

41、指針變量定義的一樣形式為: 類型講明符類型講明符 (*指針變量名指針變量名)數(shù)組長度數(shù)組長度;其中其中“類型講明符類型講明符”為所指數(shù)組的數(shù)組元素類型為所指數(shù)組的數(shù)組元素類型,“*”示意其后的變量是指針類型示意其后的變量是指針類型,“數(shù)組長度數(shù)組長度”示意所示意所指向一維數(shù)組的長度指向一維數(shù)組的長度.應(yīng)注重應(yīng)注重“(*指針變量名指針變量名)”兩兩邊的括號(hào)不可少邊的括號(hào)不可少,似貧乏括號(hào)那么示意是指針數(shù)組似貧乏括號(hào)那么示意是指針數(shù)組(背面講解背面講解),意義便完全差別了意義便完全差別了.能夠如此懂得能夠如此懂得:先看小括號(hào)內(nèi)先看小括號(hào)內(nèi),有有*號(hào)是在定義指針變量;號(hào)是在定義指針變量;接著是中括號(hào)

42、接著是中括號(hào),示意指針變量指向該長度的一維數(shù)示意指針變量指向該長度的一維數(shù)組;末了看類型講明符組;末了看類型講明符,示意該數(shù)組的每個(gè)元素為示意該數(shù)組的每個(gè)元素為類型講明符講明的類型類型講明符講明的類型.11.3.2 二維數(shù)組與指針二維數(shù)組與指針例例11.10 一個(gè)學(xué)習(xí)小組有一個(gè)學(xué)習(xí)小組有5個(gè)人個(gè)人,每個(gè)人有每個(gè)人有3門課的考試成績門課的考試成績.要求操縱函數(shù)統(tǒng)要求操縱函數(shù)統(tǒng)計(jì)每門課程的平均成績計(jì)每門課程的平均成績似似: 趙趙鈔票鈔票 孫孫李李張張Math 80 61598576C 7565638777English 9271709085咨詢題對(duì)比咨詢題對(duì)比:可定義一個(gè)二維數(shù)組可定義一個(gè)二維數(shù)組

43、score35存儲(chǔ)五個(gè)人存儲(chǔ)五個(gè)人3門課的成績門課的成績.再定義一個(gè)一維再定義一個(gè)一維數(shù)組數(shù)組courseAverage3存儲(chǔ)統(tǒng)計(jì)所得各門課平均成績存儲(chǔ)統(tǒng)計(jì)所得各門課平均成績.要完成的兩個(gè)函數(shù)都要接收一門課程(數(shù)組的一行)為指標(biāo)要完成的兩個(gè)函數(shù)都要接收一門課程(數(shù)組的一行)為指標(biāo),所以應(yīng)該設(shè)指所以應(yīng)該設(shè)指向一維數(shù)組的指針為指標(biāo)向一維數(shù)組的指針為指標(biāo).算法描述算法描述:1. 依次輸入每門課程的成績(每門課一行)依次輸入每門課程的成績(每門課一行).2. 統(tǒng)計(jì)每門課程平均成績統(tǒng)計(jì)每門課程平均成績,即對(duì)每行統(tǒng)計(jì)平均成績(函數(shù)完成)即對(duì)每行統(tǒng)計(jì)平均成績(函數(shù)完成).3. 輸出每門課程平均成績輸出每門課

44、程平均成績.11.3.2 二維數(shù)組與指針二維數(shù)組與指針#include int main() int i,j; float sum; float score35; *存儲(chǔ)成績存儲(chǔ)成績* float courseAverage3;*存儲(chǔ)每門課程平均成績存儲(chǔ)每門課程平均成績* float average(float (*p)5); *輸入成績輸入成績* for(i=0;i3;i+) *行(每門課)循環(huán)行(每門課)循環(huán)* for(j=0;j5;j+) *行內(nèi)每列循環(huán)行內(nèi)每列循環(huán)* scanf(%f,&scoreij); *輸出成績表輸出成績表* for(i=0;i3;i+) *行(每門課)循

45、環(huán)行(每門課)循環(huán)* for(j=0;j5;j+) *行內(nèi)每列循環(huán)行內(nèi)每列循環(huán)* printf(%ft,scoreij); printf(n); *每行結(jié)束輸出一個(gè)換行每行結(jié)束輸出一個(gè)換行* *統(tǒng)計(jì)平均成績統(tǒng)計(jì)平均成績* for(i=0;i3;i+) *行(每門課)循環(huán)行(每門課)循環(huán)* courseAveragei=average(score+i);*每行地址為指標(biāo)每行地址為指標(biāo)* *輸出成績表輸出成績表* for(i=0;i3;i+) printf(%ft,courseAveragei); return 0;*統(tǒng)計(jì)平均成績統(tǒng)計(jì)平均成績,指標(biāo)為行地址指標(biāo)為行地址(指向一維數(shù)組指針)(指向一維

46、數(shù)組指針)*float average(float (*p)5) int i; float sum=0; for(i=0;i5;i+) * *p轉(zhuǎn)為列地址轉(zhuǎn)為列地址,(*p+i)偏移偏移i,間接會(huì)見間接會(huì)見*(*p+i) *sum+=*(*p+i); return sum5;11.3.3 指針數(shù)組指針數(shù)組一個(gè)數(shù)組的元素值為指針一個(gè)數(shù)組的元素值為指針,那么該數(shù)組稱為指針數(shù)組那么該數(shù)組稱為指針數(shù)組.指針數(shù)組全部元素都必須是指向一樣信息類型的指針指針數(shù)組全部元素都必須是指向一樣信息類型的指針.指針數(shù)組定義的一樣形式為指針數(shù)組定義的一樣形式為: 類型講明符類型講明符 *數(shù)組名數(shù)組名數(shù)組長度數(shù)組長度;能

47、夠如此懂得能夠如此懂得:先看先看“數(shù)組名數(shù)組名數(shù)組長度數(shù)組長度”,示意定義一示意定義一個(gè)該長度的一維數(shù)組;接著看個(gè)該長度的一維數(shù)組;接著看“類型講明符類型講明符 *”,示示意該數(shù)組的每個(gè)元素為指向該類型講明符類型的意該數(shù)組的每個(gè)元素為指向該類型講明符類型的指針指針.例似例似:int *pa3;示意示意pa是一個(gè)指針數(shù)組是一個(gè)指針數(shù)組,它有三個(gè)數(shù)組元素它有三個(gè)數(shù)組元素,每個(gè)元素每個(gè)元素值根基上一個(gè)指針值根基上一個(gè)指針,指向整型變量指向整型變量.11.3.3 指針數(shù)組指針數(shù)組例例11.11 通過指針數(shù)組會(huì)見二維數(shù)組通過指針數(shù)組會(huì)見二維數(shù)組#include int main() int iArr34

48、=1,2,3,4,5,6,7,8,9,10,11,12; int *pa3;*指針數(shù)組指針數(shù)組,每個(gè)成員根基上指向每個(gè)成員根基上指向int型的指型的指針針* int iRow; pa0=iArr0; *iArr0為一維數(shù)組名為一維數(shù)組名,為為int型地址型地址* pa1=iArr1; pa2=iArr2; for(iRow=0;iRow3;iRow+) printf(%d,%d,%d,%dn,*paiRow,*(paiRow+1), *(paiRow+2),*(paiRow+3); return 0;程序運(yùn)行結(jié)論程序運(yùn)行結(jié)論:1,2,3,45,6,7,89,10,11,12 11.3.3 指針

49、數(shù)組指針數(shù)組例例11.11 通過指針數(shù)組會(huì)見二維數(shù)組通過指針數(shù)組會(huì)見二維數(shù)組11.3.4 指向指針的指針指向指針的指針 對(duì)一維數(shù)組對(duì)一維數(shù)組int iArr15;數(shù)組成員類型是數(shù)組成員類型是int,一維數(shù)組名一維數(shù)組名iArr1是指向是指向int的指針的指針常量常量,是指向其成員類型的指針常量是指向其成員類型的指針常量.對(duì)指針數(shù)組對(duì)指針數(shù)組int *pa3;數(shù)組成員類型是數(shù)組成員類型是int *,一維數(shù)組名一維數(shù)組名pa是指向是指向int *的指針的指針常量常量,同樣是指向其成員類型(指向整形的指針)同樣是指向其成員類型(指向整形的指針)的指針常量的指針常量,也便是講也便是講pa是指向指向整型

50、指針的指是指向指向整型指針的指針針.11.3.4 指向指針的指針指向指針的指針 指向指針的指針定義的一樣形式為指向指針的指針定義的一樣形式為:類型講明符類型講明符 *變量名變量名;能夠如此懂得能夠如此懂得:先看先看“*變量名變量名”,示意定義一個(gè)指針變示意定義一個(gè)指針變量;接著看量;接著看“類型講明符類型講明符 *”,示意該指針變量為指示意該指針變量為指向向“類型講明符類型講明符 *”類型的指針類型的指針.char *ppc;char c1=A;char *pc;char *ppc;pc=&c1;ppc=&pc; c1、*pc、*ppc的值都為的值都為A;分不為直截了當(dāng)會(huì)見、間

51、接會(huì)見、二級(jí)間接會(huì)見分不為直截了當(dāng)會(huì)見、間接會(huì)見、二級(jí)間接會(huì)見11.3.4 指向指針的指針指向指針的指針 例例11.12 不移動(dòng)信息不移動(dòng)信息,通過改變指針使得通過改變指針使得追加信息有序追加信息有序#include int main() int iArr5=1,5,7,9; int *pa5=&iArr0,&iArr1,&iArr2,&iArr3,0; int *ppi,i1; *-輸出原來輸出原來4個(gè)有序信息個(gè)有序信息-* printf(輸出原來輸出原來4個(gè)有序信息個(gè)有序信息n); ppi=pa;*ppi和和pa同樣為指向整型的指針的指針同樣為指向整型的指針

52、的指針 * for(i1=0;i14;i1+) printf(%dn,*ppi); ppi+; *-追加一個(gè)信息追加一個(gè)信息,原來信息不動(dòng)原來信息不動(dòng),調(diào)整指針數(shù)組調(diào)整指針數(shù)組,通過指針數(shù)組會(huì)見通過指針數(shù)組會(huì)見仍舊有序仍舊有序-* iArr4=3; pa1=&iArr4; pa2=&iArr1; pa3=&iArr2; pa4=&iArr3; *-輸出追加輸出追加1個(gè)之后的個(gè)之后的5個(gè)有序信息個(gè)有序信息-* ppi=pa;*指針回到前面指針回到前面* printf(輸出追加之后輸出追加之后5個(gè)有序信息個(gè)有序信息n); for(i1=0;i15;i1+) prin

53、tf(%dn,*ppi);ppi+; return 0;程序運(yùn)行結(jié)論程序運(yùn)行結(jié)論:輸出原來輸出原來4個(gè)有序信息個(gè)有序信息1579輸出追加輸出追加1個(gè)之后的個(gè)之后的5個(gè)有序個(gè)有序信息信息1357911.3.4 指向指針的指針指向指針的指針 11.4.1 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.13 交流變量信息交流變量信息交流形參指針變量交流形參指針變量#include void swap(int *pi1Copy,int *pi2Copy) int *piTemp; piTemp=pi1Copy; pi1Copy=pi2Copy; pi2Copy=piTemp;int main() int i

54、1=3,i2=4; int *pi1,*pi2; pi1=&i1; pi2=&i2; swap(pi1,pi2); printf(i1=%dni2=%dn,i1,i2); return 0; 11.4.1 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.13 交流變量信息交流變量信息交流形參指針變量交流形參指針變量11.4.1 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.14 交流形參指針變量所指向的變量交流形參指針變量所指向的變量#include void swap(int *pi1Copy,int *pi2Copy) int iTemp=0; *交流形參指針變量所指向的變量交流形參指針

55、變量所指向的變量, 實(shí)參不受作用實(shí)參不受作用,但是實(shí)參所指向但是實(shí)參所指向 信息改變了信息改變了* iTemp=*pi1Copy; *用的間接會(huì)見用的間接會(huì)見,現(xiàn)實(shí)上是會(huì)見現(xiàn)實(shí)上是會(huì)見i1、i2* *pi1Copy=*pi2Copy; *pi2Copy=iTemp;int main() int i1=3,i2=4; int *pi1,*pi2; pi1=&i1; pi2=&i2; swap(pi1,pi2); printf(i1=%dni2=%dn, i1,i2); return 0;11.4.1 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.14 交流形參指針變量所指向的變量交流形

56、參指針變量所指向的變量11.4.1 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.14 交流形參指針變量所指向的變量交流形參指針變量所指向的變量如果把如果把swap函數(shù)改成下面的寫法函數(shù)改成下面的寫法:void swap(int *pi1Copy,int *pi2Copy) int *ipTemp; *ipTemp=*pi1Copy; * ipTemp指向哪里?指向哪里? * *pi1Copy=*pi2Copy; *pi2Copy=*ipTemp;11.4.2 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.16 對(duì)數(shù)組中的每個(gè)元素加對(duì)數(shù)組中的每個(gè)元素加1#include int main() int iA

57、rr13=2,5,3,iJ; void add(int iArr23); *輸出數(shù)組輸出數(shù)組* for(iJ=0;iJ=2;iJ+)printf(%d ,iArr1iJ); printf(n); add(iArr1);*數(shù)組名做為實(shí)參數(shù)組名做為實(shí)參,注重注重,只有數(shù)組名只有數(shù)組名,沒有下標(biāo)沒有下標(biāo)* *函數(shù)調(diào)用后函數(shù)調(diào)用后,輸出數(shù)組輸出數(shù)組* for(iJ=0;iJ=2;iJ+)printf(%d ,iArr1iJ); printf(n); return 0;void add(int iArr23) int iI; for(iI=0;iI=2;iI+) iArr2iI+;11.4.2 數(shù)組名作

58、函數(shù)指標(biāo)數(shù)組名作函數(shù)指標(biāo) 指針變量地址指針變量地址,所以實(shí)指標(biāo)組與形指標(biāo)組能夠用指針變量取代所以實(shí)指標(biāo)組與形指標(biāo)組能夠用指針變量取代pi=iArr1;add(pi);*指針變量做為實(shí)參指針變量做為實(shí)參*void add(int* iArr2) *指針變量作形參指針變量作形參*還能夠?qū)崊⒂脭?shù)組名還能夠?qū)崊⒂脭?shù)組名,形參用變量名形參用變量名,似似:add(iArr1);*數(shù)組名做為實(shí)參數(shù)組名做為實(shí)參*void add(int* iArr2) *指針變量作形參指針變量作形參*也能夠用指針變量作實(shí)參也能夠用指針變量作實(shí)參,數(shù)組名做為形參數(shù)組名做為形參,似似:pi=iArr1;add(pi);*指針變量

59、做為實(shí)參指針變量做為實(shí)參*void add(int iArr23) *數(shù)組名做為形參數(shù)組名做為形參*11.4.2 數(shù)組名作函數(shù)指標(biāo)數(shù)組名作函數(shù)指標(biāo) 回納起來回納起來,似果有一個(gè)實(shí)指標(biāo)組似果有一個(gè)實(shí)指標(biāo)組,想在函數(shù)中改變此想在函數(shù)中改變此數(shù)組的元素的值數(shù)組的元素的值,實(shí)介入形參的對(duì)應(yīng)關(guān)系有以下種實(shí)介入形參的對(duì)應(yīng)關(guān)系有以下種:(1) 形參和實(shí)參根基上數(shù)組名形參和實(shí)參根基上數(shù)組名.(2) 實(shí)參用數(shù)組實(shí)參用數(shù)組,形參用指針變量形參用指針變量.(3) 實(shí)參、型參都用指針變量實(shí)參、型參都用指針變量.(4) 實(shí)參為指針變量實(shí)參為指針變量,型參為數(shù)組名型參為數(shù)組名.往往情況下往往情況下,為了能夠讓函數(shù)操作差別

60、長度的數(shù)組為了能夠讓函數(shù)操作差別長度的數(shù)組,能夠在能夠在指標(biāo)中增加一操作信息長度的形參變量指標(biāo)中增加一操作信息長度的形參變量.還有函數(shù)的返回值還有函數(shù)的返回值只有一個(gè)只有一個(gè),如果需要函數(shù)返回多個(gè)同類型結(jié)論信息如果需要函數(shù)返回多個(gè)同類型結(jié)論信息,也能夠也能夠操縱數(shù)組作函數(shù)指標(biāo)操縱數(shù)組作函數(shù)指標(biāo),見例見例.2 指針作函數(shù)指標(biāo)指針作函數(shù)指標(biāo) 例例11.20 把給定整數(shù)數(shù)組中能被把給定整數(shù)數(shù)組中能被3整除的信息挑出來整除的信息挑出來#include int select(int *piSourceCopy,int iN,int *piTargetCopy) int i1,iNum=0; for(i1=0;i1iN;i1+) if(piSourceCopyi1%3=0) piTargetCopyiNum+=piSourceCopyi1; return iNum;int main() int iArrSource10=5,15,25,36,47,58,69,78,56,90; int iArrTarget10;*存放結(jié)論存放結(jié)論* int i1,iNum=0; iNum=select(iArrSource,10,iArrTarget); for(i1=0;i1i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論