版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第22講,二維數(shù)組 字符串與指針 函數(shù)與指針,a+i=ai=*(a+i) = int *p; for(p=a0;pa0+12;p+) if(p-a0)%4=0) printf(n); printf(%4d ,*p); ,例 用指針變量指向二維數(shù)組的數(shù)組元素,( )不能少 (*p)說(shuō)明p是一個(gè)指針變量!,(*p)4說(shuō)明p的值是某個(gè)包含4個(gè)元素的一維數(shù)組的首地址,p是行指針,p指向的一維數(shù)組的元素個(gè)數(shù)和 二維數(shù)組列數(shù)必須相同,定義形式: 數(shù)據(jù)類型 (*指針名)一維數(shù)組的元素個(gè)數(shù); 例 int (*p)4;,2. 通過(guò)建立指針數(shù)組和行指針引用二維數(shù)組,指針數(shù)組: 如 int a34, *q4; q0
2、=,可讓p指向二維數(shù)組某一行 如 int a34, (*p)4; p=a;,main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int i,j,(*p)4; for(p=a,i=0;i3;i+,p+) for(j=0;j4;j+) printf(%d ,*(*p+j); printf(n); ,p=a0; p=*a; p=, p0j,例 指向一維數(shù)組的指針變量(行指針)應(yīng)用,for(p=a,pa+3;p+),3. 二維數(shù)組名或行指針作函數(shù)的形參,通過(guò)指針引用二維數(shù)組的幾種形式:,例 3個(gè)學(xué)生各學(xué)4門課,計(jì)算總平均分,并輸出第n個(gè)學(xué)生成績(jī),
3、main() void average(float *p,int n); void search(float (*p)4,int n); float score34= 65,67,79,60,80,87,90,81, 90,99,100,98; average(*score,12); search(score,2); ,void average(float *p,int n) float *p_end, sum=0,aver; p_end=p+n-1; for(;p=p_end;p+) sum=sum+(*p); aver=sum/n; printf(average=%5.2fn,aver);
4、 void search(float (*p)4, int n) int i; printf( No.%d :n,n); for(i=0;i4;i+) printf(%5.2f ,*(*(p+n)+i); ,列指針,行指針,函數(shù)說(shuō)明,float p4,*(*(p+n)+i) pni,例 3個(gè)學(xué)生各學(xué)4門課,計(jì)算總平均分,并查找一門以上課 不及格學(xué)生, 輸出其各門課成績(jī),*(*(p+j)+i) pji,如有: int a510,(*p)10; p = a ; 系統(tǒng)給數(shù)組a分配2*5*10個(gè)字節(jié)的內(nèi)存區(qū)。 系統(tǒng)只給變量p分配能保存一個(gè)指針值的內(nèi)存區(qū)(2字節(jié)); 數(shù)組名a的值是一個(gè)指向有10個(gè)元素的
5、一維數(shù)組的指針常量; p=a+i 使 p指向二維數(shù)組的第i行; *(*(p+i)+j) aij ; 二維數(shù)組形參實(shí)際上是一個(gè)指向一維數(shù)組的指針變量, 即: fun(int x 10) fun(int (*x)10) 在函數(shù)fun中兩者都可以有x+;x=x+2;等操作! 但在變量定義(不是形參)時(shí),兩者不等價(jià);,二維數(shù)組與指向一維數(shù)組的指針變量的關(guān)系,int *p 與 int *q10 系統(tǒng)只給p分配能保存一個(gè)指針值的內(nèi)存區(qū);而給q分配10個(gè)內(nèi)存區(qū),每個(gè)內(nèi)存區(qū)均可保存一個(gè)指針值 ; 指針數(shù)組名是二級(jí)指針常量; p=q; p+i 是qi的地址; 指針數(shù)組作形參,int *q 與int *q完全等價(jià)
6、;但作為變量定義兩者不同。,指針數(shù)組與二級(jí)指針的關(guān)系,例 main( ) char string=“I love China!”; printf(“%sn”,string); printf(“%sn”,string+7); ,1. 字符串表示形式 (1) 用字符數(shù)組實(shí)現(xiàn),10.6 指針與字符串,例 main( ) char *string=I love China!; printf(%sn,string); string+=7; while(*string) putchar(string0); string+; ,字符指針初始化:把字符串首地址賦給string 相當(dāng)于以下兩個(gè)語(yǔ)句: char
7、*string; string=I love China!;,*string!=0,(2) 用字符指針實(shí)現(xiàn),*string,例 字符串復(fù)制,(1)用字符數(shù)組 作參數(shù),void copy_string(char from,char to) int i=0; while(fromi!=0) toi=fromi; i+; toi=0; main() char a=I am a teacher.; char b=You are a student.; printf(string_a=%sn string_b=%sn,a,b); copy_string(a,b); printf(nstring_a=%s
8、nstring_b=%sn,a,b); ,2. 用指向字符串的指針作函數(shù)參數(shù),例10.19 實(shí)現(xiàn)字符串復(fù)制,void copy_string(char *from,char *to) for(;*from!=0;from+,to+) *to=*from; *to=0; void main() char *a=I am a teacher.123456789; char b80=You are a student.; printf(string_a=%snstring_b=%sn,a,b); copy_string(a,b); printf(nstring_a=%snstring_b=%sn,a
9、,b); ,(2) 用字符指針變量作參數(shù),注意:數(shù)組b要有足夠的存儲(chǔ)空間!,例 char str10; scanf(%s,str); () 而 char *cp; scanf(%s, cp); (),改為: char *cp,str10; cp=str; scanf(%s,cp); (),3. 字符指針變量與字符數(shù)組的分別,char str=“Hello!”; () char str=“Hello!”; () char str=H,e,l,l,o,!; () char *cp=“Hello”; () int a=1,2,3,4,5; () int *p=1,2,3,4,5; (),char s
10、tr10,*cp; int a10,*p; str=“Hello”; () cp=“Hello!”; () a=1,2,3,4,5; () p=1,2,3,4,5; (),字符串用一維字符數(shù)組存放; 一維字符數(shù)組中若有一個(gè)元素的值為0,則該數(shù)組可當(dāng)字符串用; 字符數(shù)組具有一維數(shù)組的所有特點(diǎn); 數(shù)組名是指向數(shù)組首地址的地址常量; 數(shù)組元素的引用方法可用指針?lè)ê拖聵?biāo)法; 數(shù)組名作函數(shù)參數(shù)是地址傳遞等; 區(qū)別 存儲(chǔ)格式:字符串結(jié)束標(biāo)志; 賦值方式與初始化; 輸入輸出方式:%s %c,4. 字符串與數(shù)組的關(guān)系,char str80; scanf(“%s”,str); printf(“%s”,str);
11、 gets(str); puts(str);,例 對(duì)字符串排序(簡(jiǎn)單選擇排序),main() void sort(char *name,int n), print(char *name,int n); char *name=Follow me,BASIC, Great Wall,FORTRAN,Computer ; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; n
12、amek=temp; ,例 對(duì)字符串排序,void print(char *name,int n) int i=0; char *p; /*p=name0;*/ while(in) p=*(name+i+); printf(%sn,p); ,#define NULL 0 void main() char *p; char *name=hello,good,world,bye,; p=name+1; printf(%o : %s , *p,*p); p+=2; while(*p!=NULL) printf(%sn,*p+); ,運(yùn)行結(jié)果: 644 : good bye,用*p可輸出地址(%o或%
13、x), 也可用它輸出字符串(%s),*(p+)右結(jié)合,例 用二級(jí)指針處理字符串,指向函數(shù)的指針變量 定義形式: 數(shù)據(jù)類型 (*指針變量名)();,函數(shù)返回值的數(shù)據(jù)類型,作用:專門存放函數(shù)的入口地址 可指向返回值類型相同的不同函數(shù),( )不能省 int (*p)() 與 int *p()不同,函數(shù)指針:函數(shù)被存放在內(nèi)存中一片連續(xù)的存儲(chǔ)單元內(nèi),其中排在最前面的那個(gè)存儲(chǔ)單元的地址就是這個(gè)函數(shù)的地址,也叫函數(shù)指針,用函數(shù)名表示,它是一個(gè)地址常量。,10.7 指針與函數(shù),如 int (*p)( );,如 int (*p)( ); p = max;,函數(shù)指針變量指向的函數(shù)必須有函數(shù)說(shuō)明,函數(shù)調(diào)用形式: c
14、= max(a,b); c= (*p)(a,b); c= p (a,b); 注意:對(duì)函數(shù)指針變量 p n , p+ 等操作沒(méi)有意義!,函數(shù)指針變量的賦值,main() int max(int ,int); int a,b,c; scanf(%d,%d, ,main() int max(int ,int), (*p)(); int a,b,c; p=max; scanf(%d,%d, ,1. 用指向函數(shù)的指針變量調(diào)用函數(shù),例 用函數(shù)指針變量作參數(shù),求最大值、最小值和兩數(shù)之和,2. 用指向函數(shù)的指針變量作函數(shù)參數(shù),函數(shù)定義形式: 類型標(biāo)識(shí)符 *函數(shù)名(參數(shù)表); 例 int *f(int x, i
15、nt y),3. 返回指針值的函數(shù),例 用指針函數(shù)實(shí)現(xiàn):有若干學(xué)生成績(jī),要求輸入學(xué)生序號(hào)后,能輸出其全部成績(jī)。,main() float score4=60,70,80,90, 56,89,67,88,34,78,90,66; float *search(float (*pointer)4,int n), *p; int i,m; printf(Enter the number of student:); scanf(%d, ,main(int argc, char *argv) ,帶參數(shù)的main函數(shù)形式:,C:TC copy source.c temp.c ,有3個(gè)字符串參數(shù)的命令行,命令
16、行中參數(shù)個(gè)數(shù),指針數(shù)組:各元素指向命令行參數(shù)中各字符串首地址,形參名argc, argv任意,命令行:在DOS操作系統(tǒng)狀態(tài)下,為執(zhí)行某個(gè)程序而鍵入的一行字符 命令行一般形式:命令名 參數(shù)1 參數(shù)2參數(shù)n,4. main函數(shù)的參數(shù),命令行參數(shù)傳遞,命令行參數(shù)的傳遞,C:TC copy source.c temp.c ,main(int argc, char *argv) ,例 輸出命令行參數(shù),/*test.c*/ main(int argc, char *argv) while(argc1) +argv; printf(%sn,*argv); -argc; ,1. 編譯、鏈接test.c,生成可執(zhí)行文件test.exe 2. 在DOS狀態(tài)下運(yùn)行(test.exe所在路徑下),main(int argc, char *argv) while(argc-0) printf(%sn,*argv+); ,例如: C:TC test hello world!,運(yùn)行結(jié)果:hello world
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省揚(yáng)州市儀征市2019-2020學(xué)年八年級(jí)下學(xué)期期中物理試題【含答案、解析】
- 2025版圖書(shū)館圖書(shū)出版資助合同規(guī)范模板3篇
- 2025版二手豪華轎車買賣及保養(yǎng)維修增值合同3篇
- 廣東省韶關(guān)市2024-2025學(xué)年八年級(jí)上學(xué)期期末地理試題(含答案)
- 2025年度木材廠租地合同與生態(tài)補(bǔ)償協(xié)議書(shū)4篇
- 2025年代購(gòu)物品委托合同
- 2025年醫(yī)療信息軟件開(kāi)發(fā)協(xié)議書(shū)
- 2025年學(xué)員就業(yè)服務(wù)合作協(xié)議
- 2025年分期付款美食餐飲外賣協(xié)議
- 2025年加盟經(jīng)營(yíng)合同簽署簽訂
- 2025-2030年中國(guó)草莓市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展趨勢(shì)分析報(bào)告
- 奕成玻璃基板先進(jìn)封裝中試線項(xiàng)目環(huán)評(píng)報(bào)告表
- 廣西壯族自治區(qū)房屋建筑和市政基礎(chǔ)設(shè)施全過(guò)程工程咨詢服務(wù)招標(biāo)文件范本(2020年版)修訂版
- 人教版八年級(jí)英語(yǔ)上冊(cè)期末專項(xiàng)復(fù)習(xí)-完形填空和閱讀理解(含答案)
- 2024新版有限空間作業(yè)安全大培訓(xùn)
- GB/T 44304-2024精細(xì)陶瓷室溫?cái)嗔炎枇υ囼?yàn)方法壓痕(IF)法
- 年度董事會(huì)工作計(jì)劃
- 《退休不褪色余熱亦生輝》學(xué)校退休教師歡送會(huì)
- 02R112拱頂油罐圖集
- 2021年新教材重慶生物高考真題(含答案解析)
- 酒店協(xié)議價(jià)格合同范文(8篇)
評(píng)論
0/150
提交評(píng)論