c語言 第9章_指針及其應(yīng)用(1)課后復(fù)習(xí)重點[1]_第1頁
c語言 第9章_指針及其應(yīng)用(1)課后復(fù)習(xí)重點[1]_第2頁
c語言 第9章_指針及其應(yīng)用(1)課后復(fù)習(xí)重點[1]_第3頁
c語言 第9章_指針及其應(yīng)用(1)課后復(fù)習(xí)重點[1]_第4頁
c語言 第9章_指針及其應(yīng)用(1)課后復(fù)習(xí)重點[1]_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-5-612022-5-62為什么引入指針的概念為什么引入指針的概念2022-5-63尋址方式尋址方式 0 內(nèi)存用戶數(shù)據(jù)區(qū)內(nèi)存用戶數(shù)據(jù)區(qū) 2000 3 變量變量 i 2004 6 變量變量 j 2008 9 變量變量 k 3010 2000 變量變量 i_pointer 2022-5-64關(guān)于指針的原則關(guān)于指針的原則2022-5-65指針的概念指針的概念 a:(3000) b:(4000)8字節(jié)字節(jié)4字節(jié)字節(jié)2022-5-66指針變量指針變量 p(4000) c(2000)75 2000*p2022-5-67指針變量的聲明指針變量的聲明例如例如: int i; int *p1; flo

2、at f1; float *p2; 2022-5-68指針變量的賦值指針變量的賦值賦給指針變量,不是賦給目標變量賦給指針變量,不是賦給目標變量例例: int i; int *p=&i;變量必須變量必須已說明過已說明過類型類型應(yīng)一致應(yīng)一致例例: int *p=&i; int i;( )例例: int i; int *p; p=&i; 2022-5-69例例: int i; int *p=&i; int *q=p;用已初始化指針變量作初值用已初始化指針變量作初值例例: int *p; p=1000; ()指針變量的賦值指針變量的賦值2022-5-610例例: voi

3、d main( ) int i=10; int *p; *p=i; printf(%d,*p); 危險!危險!例例: void main( ) int i=10,k; int *p; p=&k; *p=i; printf(%d,*p); 指針變量必須指針變量必須先賦值,再使用先賦值,再使用.200020042008整型變量整型變量i 指針變量指針變量p10隨機隨機2012變量變量k2004102022-5-611int i;float *p;p=&i;一個指針變量不能指向一個指針變量不能指向與其類型不同的變量與其類型不同的變量!int *p;float *q;p=q;應(yīng)在類型相

4、同的指應(yīng)在類型相同的指針變量之間賦值針變量之間賦值int *p;p=100;指針變量只存放地址指針變量只存放地址!我是真的,我是真的,你猜對了嗎?你猜對了嗎?2022-5-612取內(nèi)容運算取內(nèi)容運算*操作符操作符例如:例如: char c,*p=&c; *p=a; 這里這里*p 等同于變量等同于變量c 例如:例如: float f, *pf=&f; *pf =5.6f; *pf = *pf +4.4f;*pf表示表示變量變量f2022-5-613含義含義:取變量的地址取變量的地址單目運算符單目運算符優(yōu)先級優(yōu)先級: 2結(jié)合性結(jié)合性:自右向左自右向左含義含義:取指針所指向變量的內(nèi)容

5、取指針所指向變量的內(nèi)容單目運算符單目運算符優(yōu)先級優(yōu)先級: 2結(jié)合性結(jié)合性:自右向左自右向左&與與*操作符操作符2022-5-614.200020082012整型變量整型變量i變量變量i_pointer20042000指針變量指針變量10i_pointer &i &(*i_pointer)i *i_pointer *(&i)=i_pointer -指針變量,它的內(nèi)容是地址量指針變量,它的內(nèi)容是地址量*i_pointer-指針的指針的目標變量目標變量,它的內(nèi)容是數(shù)據(jù),它的內(nèi)容是數(shù)據(jù)&i_pointer-指針變量占用內(nèi)存的地址指針變量占用內(nèi)存的地址200010

6、i_pointer*i_pointer&i_pointeri指針變量指針變量變量變量變量地址變量地址(指針指針)變量值變量值地址存入地址存入指針變量指針變量指向指向2022-5-615.200020082012整型變量整型變量i變量變量i_pointer20042000指針變量指針變量10例例 i=3;-直接訪問直接訪問3例例 *i_pointer=20; -間接訪問間接訪問20直接訪問與間接訪問直接訪問與間接訪問2022-5-616例例:指針的概念指針的概念int main() int a,*pa=&a; a=10; printf(a:%dn,a); printf(*pa:%

7、dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa); return 0;.f86f8af8e整型變量整型變量a 指針變量指針變量pa10f86運行結(jié)果:運行結(jié)果:a:10*pa:10&a:f86(hex)pa:f86(hex)&pa:f8a(hex)2022-5-617例例:輸入兩個數(shù),并使其從大到小輸出輸入兩個數(shù),并使其從大到小輸出int main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&a

8、mp;b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2); return 0;.2000201620042008201220242020指針變量指針變量p1 指針變量指針變量p 指針變量指針變量p2 整型變量整型變量b 整型變量整型變量a59輸入輸入5,9(回車)(回車)a=5,b=9max=9,min=5201220162012201620122022-5-618指針與其它類型變量的對比指針與其它類型變量的對比2022-5-619指

9、針與函數(shù)指針與函數(shù)2022-5-620按值傳遞按值傳遞2022-5-621.2000201620042008201220242020例例:交換兩個數(shù)交換兩個數(shù)形參形參和和實參實參都為都為一般變量一般變量#include void swap(int x,int y) int t; t=x; x=y; y=t;int main() int a=7,b=11; printf(a=%d,b=%dn,a,b); printf(swapped:n); swap(a,b); printf(a=%d,tb=%dn,a,b); return 0;a x bt y7117117117調(diào)用前調(diào)用前調(diào)用中調(diào)用中調(diào)用結(jié)

10、束調(diào)用結(jié)束值傳遞值傳遞int a=7,b=11;int *pointer_1=&a,*pointer_2=&b;swap(*pointer_1,*pointer_2);2022-5-622按地址傳遞按地址傳遞2022-5-623.2000201620042008201220242020void swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;int main() int a=7,b=11; printf(a=%d,b=%dn,a,b); printf(swapped:n); swap(&a,&b); pri

11、ntf(a=%d,b=%dn,a,b); return 0;例例:交換兩個數(shù)交換兩個數(shù)形參形參為為指針變量指針變量a p1 bp p2711200020047117調(diào)用前調(diào)用前調(diào)用中調(diào)用中調(diào)用結(jié)束調(diào)用結(jié)束地址傳遞地址傳遞 int *p; p=p1; p1=p2; p2=p;/僅僅改變指針的指向,沒有交換僅僅改變指針的指向,沒有交換a,b值值2022-5-624.2000201620042008201220242020void swap(int *p1, int *p2) int *p; p=p1; p1=p2; p2=p;int main() int a=7,b=11; int *pointe

12、r_1=&a,*pointer_2=&b; printf(a=%d,b=%dn,a,b); printf(swapped:n); swap(pointer_1,pointer_2); printf(a=%d,b=%dn, *pointer_1,*pointer_2); return 0;a pointer_1 bp1 pointer_27112000200420042000調(diào)用前調(diào)用前調(diào)用中調(diào)用中調(diào)用結(jié)束調(diào)用結(jié)束p2p200020042000例例:交換兩個數(shù)交換兩個數(shù)形參形參和和實參實參都為都為指針變量指針變量2022-5-625void swap(int *p1, int *

13、p2) int *p; *p=*p1; *p1=*p2; *p2=*p;int main() int a=7,b=11; int *pointer_1=&a,*pointer_2=&b; printf(a=%d,b=%dn,a,b); printf(swapped:n); swap(pointer_1,pointer_2); printf(a=%d,b=%dn, *pointer_1,*pointer_2); return 0;例例:交換兩個數(shù)交換兩個數(shù)形參形參和和實參實參都為都為指針變量指針變量int x,*p=&x;指針變量在使用前指針變量在使用前必須賦值!必須賦值

14、!2022-5-6262022-5-627日期轉(zhuǎn)換問題日期轉(zhuǎn)換問題 2022-5-628計算某年的第幾天是該年的第幾月第幾日計算某年的第幾天是該年的第幾月第幾日2022-5-629例:例:int array10; int *p=&array1; array0array1array2array3array9.p指針與數(shù)組指針與數(shù)組2022-5-630指針運算指針運算-算術(shù)運算算術(shù)運算2022-5-631+(*p)*(+p)*(p+)(*p)+讓讓p指向的指向的對象對象+1先讓先讓p指向下一個單元指向下一個單元,再取,再取p指向的對象指向的對象先取先取p指向的對象,再讓指向的對象,再讓p指

15、向下一單元指向下一單元先取先取p指向的對象,再讓指向的對象,再讓對象對象+1指針運算指針運算-算術(shù)運算算術(shù)運算n例如例如: int a=1,b=3,*p; p=&a; +(*p); *(+p); p22022-5-632指針運算指針運算-關(guān)系運算關(guān)系運算2022-5-633指針運算指針運算-賦值運算賦值運算void main() int a,*p=&a; scanf(%d,p);2022-5-634指針與數(shù)組指針與數(shù)組6000600160026003600460056006600760086009a0a1a2aa+1a+2pp+1p+2數(shù)組名數(shù)組名是表示數(shù)組是表示數(shù)組首地首地址

16、的址的地址常量地址常量2022-5-635a0a1a2a3a9.aa+9a+1a+2地址地址元素元素下標法下標法a0a1a2a9 變址運算符變址運算符ai *(a+i)*a*(a+1)*(a+2)*(a+9)a0a1a2a3a9.pp+9p+1p+2地址地址指針法指針法元素元素*p*(p+1)*(p+2)*(p+9)p0p1p2p9ai pi *(p+i) *(a+i)數(shù)組元素表示方法數(shù)組元素表示方法2022-5-636輸入輸出數(shù)組的全部元素輸入輸出數(shù)組的全部元素方法方法1:下標法下標法 void main() int a10; int i; for (i=0; i10; i+) scanf(

17、%d, &ai); for (i=0; i10; i+) printf(%d , ai);方法方法2:指針法指針法 void main() int a10; int *p,i; for (p=a; p(a+10); p+) scanf(%d, p); for (p=a; p(a+10); p+) printf(%d , *p);2022-5-637例:用多種方法訪問一維數(shù)組各元素例:用多種方法訪問一維數(shù)組各元素void main() int a5,*pa,i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+)printf(*(pa+%d):%dn,

18、i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+)printf(pa%d:%dn,i,pai); for(i=0;i5;i+)printf(a%d:%dn,i,ai);a0a1a2a3a412345pa2022-5-638例例:int a=1,2,3,4,5,6,7,8,9,10,*p=a,i; 數(shù)組元素地址數(shù)組元素地址的正確表示:的正確表示: (A)&(a+1)(B)a+(C)&p(D)&pi 數(shù)組名是數(shù)組名是地址常量,地址常量,下列寫法是否正確下列寫法是否正確p+,p-a+,a-

19、a+1,*(a+2)( )( )( )2022-5-639例例:注意指針變量的運算注意指針變量的運算int main() int a=5,8,7,6,2,7,3; int y,*p=&a1; y=(*-p)+; printf(%d ,y); printf(%d,a0); return 0; ap輸出:輸出:5 662022-5-640例:注意指針的當前值例:注意指針的當前值int main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d ,*p); retur

20、n 0;ap指針變量可以指到指針變量可以指到數(shù)組后數(shù)組后的內(nèi)存單元的內(nèi)存單元p=a;58762732022-5-641數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)實參實參形參形參數(shù)組名數(shù)組名指針變量指針變量數(shù)組名數(shù)組名指針變量指針變量數(shù)組名數(shù)組名數(shù)組名數(shù)組名指針變量指針變量指針變量指針變量2022-5-642指針與一維數(shù)組指針與一維數(shù)組2022-5-643例例:用函數(shù)實現(xiàn)將一維數(shù)組用函數(shù)實現(xiàn)將一維數(shù)組a中的中的n個整數(shù)按相反順序存放個整數(shù)按相反順序存放void inv(int x,int n) int t,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; t=xi; xi=x

21、j; xj=t; void main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The array has been reverted:n); for(i=0;i10;i+) printf(%d,ai); printf(n);實參與形參均用數(shù)組實參與形參均用數(shù)組2022-5-644void inv(int *x,int n) int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p;i+,j-) t=*i; *i=*j; *j=t; void main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The array has been reverted:n); for(i=0;i10;i+) printf(%d,ai); printf(n);實參用數(shù)組實參用數(shù)組,形參用指針變量形參用指針變量例例:用函數(shù)實現(xiàn)將一維數(shù)組用函數(shù)實現(xiàn)將一維數(shù)組a

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論