![科銳3第07講指針_第1頁(yè)](http://file4.renrendoc.com/view/10df1d1d21bacb9accddd4b97a7d9bd3/10df1d1d21bacb9accddd4b97a7d9bd31.gif)
![科銳3第07講指針_第2頁(yè)](http://file4.renrendoc.com/view/10df1d1d21bacb9accddd4b97a7d9bd3/10df1d1d21bacb9accddd4b97a7d9bd32.gif)
![科銳3第07講指針_第3頁(yè)](http://file4.renrendoc.com/view/10df1d1d21bacb9accddd4b97a7d9bd3/10df1d1d21bacb9accddd4b97a7d9bd33.gif)
![科銳3第07講指針_第4頁(yè)](http://file4.renrendoc.com/view/10df1d1d21bacb9accddd4b97a7d9bd3/10df1d1d21bacb9accddd4b97a7d9bd34.gif)
![科銳3第07講指針_第5頁(yè)](http://file4.renrendoc.com/view/10df1d1d21bacb9accddd4b97a7d9bd3/10df1d1d21bacb9accddd4b97a7d9bd35.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7講 指針第五章 指針 指針運(yùn)算是地址的運(yùn)算( T *px) px+n, px-n 將指針從當(dāng)前位置向前或向后移動(dòng)n個(gè)數(shù)據(jù)單位,而不是n個(gè)字節(jié)。 這取決于指針?biāo)赶虻臄?shù)據(jù)類型(T)。 pxn的結(jié)果為: pxnsizeof(T) px-py求出的是兩指針位置之間的數(shù)據(jù)個(gè)數(shù),而不是地址差。 px-py的結(jié)果為:( px-py) / sizeof(T) y= px+y= ( px+ ), 注意優(yōu)先級(jí)和結(jié)合順序 y= + pxy= ( + px) 問(wèn)題:y= px+和y= (px)+的意義struct student int number; char name4;student *pst;5.1 指
2、針及其運(yùn)算 5.1.1 指針的算術(shù)運(yùn)算pstpst=pst+1; 5.1.3 指針的關(guān)系運(yùn)算 是對(duì)兩個(gè)相同類型的指針的運(yùn)算,如pxpy,當(dāng)px所指位置在py之前時(shí),表達(dá)式的值為 1,否則為0。px=0, px!=0用來(lái)判斷px是否為空指針。 不同類型的指針以及指針和一般整數(shù)間的關(guān)系運(yùn)算是無(wú)意義的。 5.1.4 指針的賦值運(yùn)算 賦的值必須是地址常量或變量,而不能是普通整數(shù),有以下幾種形式: 1. 變量地址賦予指向相同數(shù)據(jù)類型的指針 char c, *pc; pc=&c; 2.指針賦予相同數(shù)據(jù)類型的另一指針 int *p, *q; p=q; 3.其它形式 int *p, *q, n; p=q+n;
3、 p+=n;5.2 指針和數(shù)組 5.2.1 指針與數(shù)組的關(guān)系 可以用指針代替數(shù)組下標(biāo)來(lái)訪問(wèn)數(shù)組: f ( ) int a5; int *pa; *(pa+3)=10; pa3=10; *(a+3)=10; a3=10; 指針與數(shù)組的差異:指針是地址變量,可任意改變它的值;而數(shù)組名是地址常量,其值不能改變。 5.2.2 字符指針與字符數(shù)組 可用字符數(shù)組表示字符串,也可用字符指針指向字符串的首址。 指針表示字符串可以賦多個(gè)串值,只要將字符串的首址賦給它。 字符數(shù)組是常量不能賦值。 ex. 1 include main ( ) static char str =“string”; char *ps;
4、 ps=str; while ( *ps !=0) cout*ps; ps+; coutendl; 5.2.3 指針數(shù)組 指向同一類型對(duì)象的指針組成的數(shù)組。每個(gè)數(shù)組元素都是一指針變量。 存儲(chǔ)類型 數(shù)據(jù)類型 * 指針數(shù)組名元素個(gè)數(shù) ex. 2 void main ( ) int a23, *pa2; pa0=a0; pa1=a1; for ( int i=0; i3; i+ ) *( pa0+i)=i; for ( i=0; i3; i+ ) *( pa1+i)=i; 5.3 指針和函數(shù) 5.3.1 指針函數(shù)(指針作為函數(shù)的返回值) 存儲(chǔ)類型 數(shù)據(jù)類型 * 函數(shù)名(參數(shù)表) ex. 3 char
5、 *string_name ( int n ) char * string = “illegal string”, “string 1”, “string 2”, “string 3” return ( n3 ) ? string0: stringn; static 返回的是變量地址,必須保證函數(shù)返回后,這個(gè)變量仍然存在。要返回函數(shù)中局部變量的地址,應(yīng)聲明為靜態(tài)的。 問(wèn)題: char sname20; sname=string_name(n); 5.3.1 函數(shù)指針(函數(shù)的入口地址可賦給指針) 雖然函數(shù)不是變量,仍占存儲(chǔ)空間,此空間的首地址函數(shù)入口地址。 存儲(chǔ)類型 數(shù)據(jù)類型 (* 函數(shù)指針名)
6、(參數(shù)表) ex. 4 int (*fp) ( char ); /fp為一函數(shù)指針, 此函數(shù) 的返回值為int,參數(shù)為char 要將函數(shù)指針指向一具體的函數(shù),用賦值語(yǔ)句: ex. 5 int f( char ); fp=f; 與普通變量指針不同,函數(shù)指針指向程序代碼區(qū),而不是數(shù)據(jù)存儲(chǔ)區(qū)。 int i= (*fp) (a); int i=f (a) ; 要保證函數(shù)指針的參數(shù)和返回值與所指向的函數(shù)正好匹配。 ex. 6 void (*fp) ( char * ); void f1(char * ); int f2( char * ); void f3( int * ); void f( ) fp=
7、&f1; fp=&f2; fp=&f3; (* fp) (“asdf”); (* fp) (1); int i=(*fp) (“qwer”); C+不能把函數(shù)當(dāng)作參數(shù)傳遞,但傳遞函數(shù)指針允許。 ex. 7 void sort ( void * base, unsigned int n, unsigned int sz, int (*cmp) (void*, void* ) /把n個(gè)元素的向量base按升序排列,向量每個(gè)元素大小sz for(int i=0; in-1;i+) for (int j=n-1; ij; j-) char *pj=(char * ) base+j*sz; /bj ch
8、ar *pj1=pj-sz; /bj-1 if(*cmp)(pj,pj1)0) for( int k=0; ksz; k+) char temp=pjk; pjk=pj1k; pj1k=temp; void * 性質(zhì):任何類型的指針都可以賦給它。作為參數(shù)傳入指向任何類型的指針都可與它匹配。 兩個(gè)比較函數(shù): #include int cmp_int ( void *p, void *q) if ( * (int *) p * (int *) q ) return 1; else if ( * (int *) p = * (int *) q ) return 0; else return 1; i
9、nt cmp_str ( void *p, void *q ) return strcmp ( * (char *) p, * (char *) q ); 主程序: #include int main ( ) static int ii = 3,9,5,4; static char * str = “compare”, “the”, “string” ; sort ( ii, 4, sizeof (int), &cmp_int ); sort ( str, 3, sizeof ( char *) , &cmp_str ); cout“The result of sort string:”end
10、l; for ( int i=0; i3; i+) coutstr i 按指針訪問(wèn)成員。 如:LiMing. Salary=1200.56; p-sex=M; 5.5.3 結(jié)構(gòu)、指針和數(shù)組 結(jié)構(gòu)名 結(jié)構(gòu)數(shù)組名元素個(gè)數(shù); 結(jié)構(gòu)名 *結(jié)構(gòu)指針名; ex. 10 person company52; person * pany; cout(*(pperson+3).nameendl;結(jié)構(gòu)中成員指針的類型沒(méi)有任何限制,可以是基本類型,也可以是結(jié)構(gòu),甚至可以定義引用自身的結(jié)構(gòu)。 ex. 11 struct inode int data; inode *next; ;舉例:70%的學(xué)生通過(guò)考試,從鍵盤輸入學(xué)
11、生姓名和成績(jī),按分?jǐn)?shù)高低輸出,并用pass或fail表示是否通過(guò)考試 ex. 12 #include #include struct STUDENT char name30; int grade; ; void sortclass(STUDENT st , int nst); void swap(STUDENT &ps1, STUDENT &ps2); void main( ) STUDENT *classes; int ns; coutns; classes=new STUDENTns; cout“Enter name and grade for each studentn”; for (i
12、nt i=0; classesi.grade; sortclass(classes, ns); const int cutoff=(ns*7)/10-1; for( i=0; ins; i+) “ “classi.grade; if(i=cutoff) cout“passn”; else cout“failn”; void sortclass(STUDENT st , int nst) for( int i=0; i(nst-1); i+) int pick=i; for(int j=i+1; jstpick.grade ) pic
13、k=j; swap(sti, stpick); void swap(STUDENT &ps1, STUDENT &ps2) STUDENT temp; strcpy(, ); temp.grade=ps1.grade; strcpy(, ); ps1.grade=ps2.grade; strcpy(, ); ps2.grade=temp.grade; 5.5.5 聯(lián)合 union 聯(lián)合名 數(shù)據(jù)類型 成員名1; 數(shù)據(jù)類型 成員名2; 數(shù)據(jù)類型 成員名n; ; 成員1、成員2、成員n共享內(nèi)存,編譯器
14、總是按聯(lián)合中最大成員類型分配內(nèi)存。 5.5.6 枚舉(一個(gè)有名字的整數(shù)集合) enum 枚舉名 標(biāo)識(shí)符1,標(biāo)識(shí)符2, ,標(biāo)識(shí)符n 例如:enum color red, white, black; /red=0, white=1, black=2 color chair; /chair 的取值只能是red, white或black 枚舉的使用: ex. 13 viod f( ) color suit=white; int i=red; suit=i; /錯(cuò), suit=color(i); /正確,把整數(shù)賦給枚舉類型要強(qiáng)制類型轉(zhuǎn)換 i=suit; suit=4; /錯(cuò) 在特定時(shí)刻,聯(lián)合只有一個(gè)成員
15、被保存,而不提供其它成員的信息。 標(biāo)識(shí)符的值也可以自己定義: 例如:enum color red, white=7, black=2; 匿名枚舉表示一組常量: 例如:enum ASM,AUTO,BREAK; const int ASM=0; const int AUTO=1; const int BREAK=2; 5.5.7 類型定義 typedef (為數(shù)據(jù)類型定義新名) typedef char * STRING; char *str; typedef char (*PFC) (int, char *); PFC f1;STRING str; 5.6 結(jié)構(gòu)與函數(shù) 5.6.1 結(jié)構(gòu)用作函數(shù)參數(shù)和返回值 多個(gè)成員的參數(shù)傳遞效率
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3401-2024石漠化防治術(shù)語(yǔ)
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)5.3.1《平行線的性質(zhì)》聽(tīng)評(píng)課記錄1
- 粵教版道德與法治九年級(jí)上冊(cè)3.2.2《社會(huì)和諧 人人共享》聽(tīng)課評(píng)課記錄
- 浙教版數(shù)學(xué)七年級(jí)下冊(cè)《4.3 用乘法公式分解因式》聽(tīng)評(píng)課記錄2
- 中圖版歷史七年級(jí)上冊(cè)第5課《青銅器和甲骨文》聽(tīng)課評(píng)課記錄
- 人教部編版八年級(jí)道德與法治上冊(cè):3.1《維護(hù)秩序》聽(tīng)課評(píng)課記錄1
- 環(huán)保工程合同(2篇)
- 人教版七年級(jí)地理下冊(cè)《日本》聽(tīng)課評(píng)課記錄4
- 人教版歷史八年級(jí)上冊(cè)第15課《北伐戰(zhàn)爭(zhēng)》聽(tīng)課評(píng)課記錄
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《16.3可化為一元一次方程的分式方程2》聽(tīng)評(píng)課記錄9
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 2025年江蘇農(nóng)牧科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025江蘇連云港市贛榆城市建設(shè)發(fā)展集團(tuán)限公司招聘工作人員15人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級(jí)上學(xué)期英語(yǔ)期末試卷(含答案無(wú)聽(tīng)力原文無(wú)音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長(zhǎng)郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 《軌道交通工程盾構(gòu)施工技術(shù)》 課件 項(xiàng)目2 盾構(gòu)構(gòu)造認(rèn)知
- 《港珠澳大橋演講》課件
- 《有機(jī)化學(xué)》課件-第十章 羧酸及其衍生物
- 人教版道德與法治五年級(jí)下冊(cè)《第一單元 我們一家人》大單元整體教學(xué)設(shè)計(jì)2022課標(biāo)
- 2024年海南公務(wù)員考試申論試題(A卷)
評(píng)論
0/150
提交評(píng)論