《C語言程序設(shè)計》第5章指針課件_第1頁
《C語言程序設(shè)計》第5章指針課件_第2頁
《C語言程序設(shè)計》第5章指針課件_第3頁
《C語言程序設(shè)計》第5章指針課件_第4頁
《C語言程序設(shè)計》第5章指針課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計第5章指針第五章第五章 指指 針針PointerPointerC語言程序設(shè)計第5章指針5.1 指針的基本概念指針的基本概念 指針指針是是C語言的重要特征,是語言的重要特征,是C語言訪問內(nèi)存數(shù)據(jù)和程序的靈活語言訪問內(nèi)存數(shù)據(jù)和程序的靈活和有效的手段。和有效的手段。 C C語言的指針支持:語言的指針支持: 函數(shù)的地址調(diào)用;函數(shù)的地址調(diào)用; 動態(tài)分配內(nèi)存;動態(tài)分配內(nèi)存; 數(shù)組的地址引用。數(shù)組的地址引用。C語言程序設(shè)計第5章指針內(nèi)存、地址、指針內(nèi)存、地址、指針 (Memory ,Address, Pointer) 內(nèi)存內(nèi)存存放了計算機(jī)正在運行的程序和程序正在使用的數(shù)據(jù)。內(nèi)存放了計算機(jī)正在運

2、行的程序和程序正在使用的數(shù)據(jù)。內(nèi)存的基本單元是字節(jié)存的基本單元是字節(jié)(Byte)。 為了訪問內(nèi)存單元,為了訪問內(nèi)存單元,CPU給每個內(nèi)存單元一個編號,該編號稱給每個內(nèi)存單元一個編號,該編號稱為該內(nèi)存單元的為該內(nèi)存單元的地址地址。 變量變量是程序中可以改變的量,當(dāng)說是程序中可以改變的量,當(dāng)說明變量時,系統(tǒng)將為其在內(nèi)存中開辟相明變量時,系統(tǒng)將為其在內(nèi)存中開辟相應(yīng)得內(nèi)存單元。由此確定變量的應(yīng)得內(nèi)存單元。由此確定變量的地址地址及及內(nèi)存中的表示方式。內(nèi)存中的表示方式。2000H2001H2002H2003Hint a=0;a的的內(nèi)內(nèi)存存單單元元a的地址的地址&a 如果有一變量如果有一變量p,其內(nèi)

3、容存放了其內(nèi)容存放了a的的地址地址&a,通過,通過p也可實現(xiàn)對也可實現(xiàn)對a的訪問,的訪問,p稱為指針,并指向稱為指針,并指向a。00H20H00pC語言程序設(shè)計第5章指針指針的說明指針的說明 指針是特殊類型的變量,其內(nèi)容是變量的地址。指針是特殊類型的變量,其內(nèi)容是變量的地址。在使用前必須在使用前必須說明,說明某標(biāo)識符是指針類型,并可指向某種類型的對象。說明,說明某標(biāo)識符是指針類型,并可指向某種類型的對象。指針的說明格式:指針的說明格式: type *pname1,*pnamen;標(biāo)識符命名的指針變量名。標(biāo)識符命名的指針變量名。指針標(biāo)志。指針標(biāo)志。指針指向?qū)ο蟮念愋汀V羔樦赶驅(qū)ο蟮念愋汀?/p>

4、int *p, *q; /* p、q是指向整型變量的指針。是指向整型變量的指針。*/float *pfValue ,*pf; /* pfValue和和pf是指向浮點型的指針。是指向浮點型的指針。*/C語言程序設(shè)計第5章指針指針對變量的引用指針對變量的引用 定義指針的目的是通過指針引用內(nèi)存對象,指針的引用應(yīng)按如定義指針的目的是通過指針引用內(nèi)存對象,指針的引用應(yīng)按如下步驟進(jìn)行:下步驟進(jìn)行:說明指針說明指針 int a=0, *p;指針指向?qū)ο笾羔樦赶驅(qū)ο髉=&a;通過指針引用對象通過指針引用對象*p=*p+2;4.指針操作的兩種運算符:指針操作的兩種運算符:取地址運算取地址運算 &

5、 &a表示取變量表示取變量a地址的運算。地址的運算。間接運算間接運算 * *p表示取指針表示取指針p指向變量內(nèi)容的運算。指向變量內(nèi)容的運算。int a,*p; 2000Happ=&a; /* p指向指向a。 */2000H*p=2;2C語言程序設(shè)計第5章指針舉例:舉例:#include void main (void ) int x ,*p; x=55; p=&x; printf ( “ %d, %u ”, x, *p) ; *p=65; printf ( “ %d, %u”, x, *p) ;2000Hxp2000H5565關(guān)于指針的說明:關(guān)于指針的說明:指針必須指向

6、對象后,才能引用。指針必須指向?qū)ο蠛?,才能引用?int *p; *p=2; /* Error! */ &和和 * 為互補(bǔ)運算。為互補(bǔ)運算。int a,*p; p=&a;則:則:&*p p *&a aC語言程序設(shè)計第5章指針【例【例5-1】 /* example 5-1 指針訪問簡單變量示例指針訪問簡單變量示例 */ #include void main( void ) int a,b,*p1,*p2; p1 = &a; /* p1指向指向a */ p2 = &b; /* p2指向指向b */ scanf(%d%d, p1,&b); pr

7、intf(a+b=%dn, *p1+*p2); C語言程序設(shè)計第5章指針5。指針的運算指針的運算 指針是指針是特殊類型特殊類型的變量,其內(nèi)容是的變量,其內(nèi)容是變量的地址,變量的地址,因此因此指針的運指針的運算及結(jié)果一定要符合地址邏輯。算及結(jié)果一定要符合地址邏輯。五種算術(shù)運算五種算術(shù)運算int a, b, *p1, *p2;p1=&a;p2=&b;a2000Hb2400Hp1p22000H2400Hp1+; /*含義指向含義指向a后的整型單元后的整型單元*/2002H2002Hp1- -; /*指向指向a前的整型單元前的整型單元*/p1+n; /*指向指向a后的第后的第n個整型單

8、元個整型單元*/p1- n; /*指向指向a前的第前的第n個整型單元個整型單元*/p2- p1; /*a和和b之間差的單元數(shù)之間差的單元數(shù)*/結(jié)果結(jié)果200Hp n 相當(dāng)于相當(dāng)于: p的實際內(nèi)容的實際內(nèi)容 n sizeof(*p);六種關(guān)系運算六種關(guān)系運算比較兩個同類型變量之間的地址關(guān)系。比較兩個同類型變量之間的地址關(guān)系。p1p2;C語言程序設(shè)計第5章指針指針賦值運算#include void main(void) int a,b,*p1,*p2; a=2; b=3; p1=&a; p2=&b; *p1=*p2; printf(“%d,%dn”,a,b); a=3; b=5;

9、p1=p2; printf(“%d,%d”,*p1,*p2);差別差別a&a 2000Hb&b 2400Hp1p2232000H2400HC語言程序設(shè)計第5章指針5.2 指針與數(shù)值型數(shù)組指針與數(shù)值型數(shù)組 數(shù)組是同類型的變量的集合,各元素按下標(biāo)的特定順序占據(jù)一數(shù)組是同類型的變量的集合,各元素按下標(biāo)的特定順序占據(jù)一段連續(xù)的內(nèi)存,段連續(xù)的內(nèi)存,各元素的地址也連續(xù),各元素的地址也連續(xù),指針對數(shù)組元素非常方便。指針對數(shù)組元素非常方便。指針與一維數(shù)組指針與一維數(shù)組通過指針引用數(shù)組元素可以分以下三個步驟:通過指針引用數(shù)組元素可以分以下三個步驟:說明指針和數(shù)組說明指針和數(shù)組int *p,a10

10、;指針指向數(shù)組指針指向數(shù)組p=a; /*指向數(shù)組的首地址指向數(shù)組的首地址*/p=&a0; /*指向數(shù)組的首地址指向數(shù)組的首地址*/通過指針引用數(shù)組元素通過指針引用數(shù)組元素當(dāng)指針指向數(shù)組的首地址時,則下標(biāo)為當(dāng)指針指向數(shù)組的首地址時,則下標(biāo)為i的元素地址為:的元素地址為: p+i 或或a+i引用數(shù)組元素可以有三種方法:引用數(shù)組元素可以有三種方法:下標(biāo)法:下標(biāo)法: a i 指針法:指針法: *(p+i)數(shù)組名法:數(shù)組名法:*(a+i)注意:數(shù)組名是地址常量,不能改變!注意:數(shù)組名是地址常量,不能改變! a=p; /*Error!*/C語言程序設(shè)計第5章指針 /* example 5-2 通過

11、指針訪問數(shù)組元素通過指針訪問數(shù)組元素 */ #include void main(void) double dArray10,dAvge,*dPointer; int i; dAvge = 0; dPointer = dArray; /* 指針指向數(shù)組指針指向數(shù)組 */ for(i=0; i10; i+) scanf(%lf,dPointer + i); /*dPointer+i為下標(biāo)為為下標(biāo)為i的元素地的元素地址址*/ dAvge += *(dPointer + i); /* 累加各個元素的值累加各個元素的值 */ dAvge /= 10; printf(The avgerage of ar

12、ray is: %lfn,dAvge); 【例【例5-2】有一個具有】有一個具有10個元素的雙精度數(shù)組,通過指針求其所個元素的雙精度數(shù)組,通過指針求其所有元素的平均值。有元素的平均值。C語言程序設(shè)計第5章指針/* example 5-3 通過指針求數(shù)組元素最大值及其位置通過指針求數(shù)組元素最大值及其位置*/#include void main(void) int iArray10,*ipCur; /* ipCur遍歷訪問數(shù)組的指針遍歷訪問數(shù)組的指針 */ int *ipPos; /* ipPos最大元素地址最大元素地址*/ int i; ipCur = iArray; /*指針指向數(shù)組指針指向數(shù)

13、組*/ for(i=0; i10; i+) scanf(%d, ipCur+); /* ipCur為下標(biāo)為為下標(biāo)為i的數(shù)組元素的地址的數(shù)組元素的地址 */ ipPos = iArray; /* 指向數(shù)組首地址指向數(shù)組首地址 */ /* 設(shè)下標(biāo)為設(shè)下標(biāo)為0的元素為最大值的元素為最大值 */ ipCur = iArray + 1; 【例【例5-3】通過指針求數(shù)組的最大值及其位置?!客ㄟ^指針求數(shù)組的最大值及其位置。C語言程序設(shè)計第5章指針 for(i=1; i *ipPos) ipPos = ipCur; /* ipPos保存最大元素的地址保存最大元素的地址*/ ipCur+; /*指向下一元素指向

14、下一元素*/ printf(The max is %dn,*ipPos); printf(The position is %dn,ipPos-iArray);C語言程序設(shè)計第5章指針舉例:打印數(shù)組中的奇數(shù)。舉例:打印數(shù)組中的奇數(shù)。#include void main(void ) int i ,a 10 ; for (i=0 ; i10 ; i+ ) scanf ( “ %d” , &ai ) ; for (i=0 ; i10 ; i+) if ( a i % 2 ) printf ( “ %d”, a i ); 數(shù)組元素法。數(shù)組元素法。循環(huán)輸入。循環(huán)輸入。循環(huán)判斷,滿足條件輸出。循環(huán)

15、判斷,滿足條件輸出。數(shù)組名法。數(shù)組名法。 a+i *(a+i)指針法。指針法。 ,*p ;p = a;p+*(p+i)結(jié)果是否結(jié)果是否正確?正確?p= a; *p=&a0;*注意指針在運算時的變化。注意指針在運算時的變化。C語言程序設(shè)計第5章指針2.指針與二維數(shù)組指針與二維數(shù)組如下說明數(shù)組如下說明數(shù)組int a34=1,2,3,4,5,6,7,8,9,10,11,12;其二維結(jié)構(gòu)如下:其二維結(jié)構(gòu)如下:12345 6789101112行行列列為了便于索引,為了便于索引,C語言將數(shù)組分為兩級管理。語言將數(shù)組分為兩級管理。a0a1a2 將將a理解為一維數(shù)組,理解為一維數(shù)組, 數(shù)組有三個元素,

16、它們分別為數(shù)組有三個元素,它們分別為a0、a1,a2 。各個元素又是一個有四個元素的一維數(shù)組。各個元素又是一個有四個元素的一維數(shù)組。從地址的角度看:從地址的角度看:a 為為a0 第一行的首地址第一行的首地址a+1 為為a1 第二行的首地址第二行的首地址a+2 為為a2 第三行的首地址第三行的首地址a+1 地址一次加一行。地址一次加一行。i行行j列數(shù)組元素的地址可以由列數(shù)組元素的地址可以由a i +j得到。得到。C語言程序設(shè)計第5章指針數(shù)組名地址的兩級管理數(shù)組名地址的兩級管理aa0a1a2a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23等價地址及其管理方

17、式等價地址及其管理方式數(shù)組名是數(shù)組的地址,而且是常量,數(shù)組名是數(shù)組的地址,而且是常量,* 運算不改變其值!運算不改變其值!以下三種地址等價:以下三種地址等價:a+i*(a+i)a i 加法按行遞增加法按行遞增加法按列遞增加法按列遞增(a+1)+1*(a+1)+1差別?差別?C語言程序設(shè)計第5章指針 數(shù)組名表示數(shù)組元素數(shù)組名表示數(shù)組元素a i j (*(a+i) j *(*(a+i)+j)*(a i +j)指針與二維數(shù)組指針與二維數(shù)組int *p, a34;p=a;aij*(p+4*i+j)等價!等價!a00aa01a02a0a10a11a12a1a20a21a22a2a+1a1+2C語言程序設(shè)

18、計第5章指針 /* example 5-4 求二維數(shù)組最小值及其位置求二維數(shù)組最小值及其位置 */ #include void main(void) int a34,i,j; int iMinRow,iMinCol; /*iMinRow最小值的行,最小值的行,iMinCol最小值的列最小值的列 */ for(i=0; i3; i+) for(j=0; j4; j+) scanf(%d,ai + j); /* ai+j為為i行行j列元素的地址列元素的地址 */ iMinRow = 0; iMinCol = 0; /*假定假定a00為最小值為最小值*/ for(i=0; i3; i+) for(j

19、=0; j4; j+) if(*(*(a + i) + j) aiMinRowiMinCol) iMinRow = i;iMinCol = j; /* 修正修正i和和j為新的最小值下標(biāo)為新的最小值下標(biāo) */ printf(The min is a%d%d=%dn, iMinRow,iMinCol,aiMinRowiMinCol); 【例【例5-4】輸入三行四列的整型數(shù)組,求最小值及其位置。】輸入三行四列的整型數(shù)組,求最小值及其位置。C語言程序設(shè)計第5章指針 /* example 5-5 通過指針求二維數(shù)組元素的累加和通過指針求二維數(shù)組元素的累加和 */ #include void main(v

20、oid) int i,j,a23,sum; int *p; p = (int *)a;/*p指向數(shù)組指向數(shù)組a,由于,由于a加加1加加1行,轉(zhuǎn)換為整型指針行,轉(zhuǎn)換為整型指針*/ for(i=0; i2; i+) for(j=0; j3; j+) scanf(“%d”,ai + j); /* ai + j為為i行行j列元素的地址列元素的地址*/ sum = 0; for(i=0; i2; i+)for(j=0; j3; j+) sum += *(p + i*3 +j); /* 通過指針通過指針p表示表示aij */ printf(The sum of a = %dn,sum); 【例【例5-5】

21、輸入兩行三列的整型數(shù)組,通過指針求所有元素的累加和?!枯斎雰尚腥械恼蛿?shù)組,通過指針求所有元素的累加和。C語言程序設(shè)計第5章指針舉例:舉例: 在數(shù)組在數(shù)組a中查找輸入的數(shù),輸出行列位置。中查找輸入的數(shù),輸出行列位置。#include void main (void ) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int i, j,iS; int *p; p=a; scanf (“ %d” , &iS) ; for(i=0;i3;i+)for(j=0;j4;j+) if(iS= a i j ) printf(“iS equal to a%d %d n”,i

22、, j); 下標(biāo)法。下標(biāo)法。*(a i +j)*(*(a+i)+j)*(p+4*i+j)C語言程序設(shè)計第5章指針【例【例5-6】輸入】輸入3行行4列的浮點型數(shù)組,通過指針求數(shù)組的平均值。列的浮點型數(shù)組,通過指針求數(shù)組的平均值。/* example 5-6 通過指針求二維數(shù)組的平均值通過指針求二維數(shù)組的平均值 */#include void main(void) int i,j; float a34,fAvg; float (*p)4; p = a; /*指針指向數(shù)組指針指向數(shù)組*/ fAvg = 0; for(i=0; i3; i+) for(j=0; j4; j+) scanf(“%f”,p

23、i+j); /* pi + j為為i行行j列元素的地址列元素的地址*/ fAvg += pij; /* pij表示表示aij*/ fAvg /=12; printf(The average of a = %fn,fAvg);C語言程序設(shè)計第5章指針5.3 指針與字符串(字符數(shù)組)指針與字符串(字符數(shù)組)字符串在內(nèi)存中可以存儲為兩種形式:字符串在內(nèi)存中可以存儲為兩種形式:字符數(shù)組字符數(shù)組字符串常量字符串常量 可以使指針指向字符數(shù)組或字符串常量,通過指針引用字符數(shù)可以使指針指向字符數(shù)組或字符串常量,通過指針引用字符數(shù)組或字符串的各個字符。組或字符串的各個字符。1.指針與字符數(shù)組:指針與字符數(shù)組:c

24、har *chp,str =”Hello!”; /*說明字符指針和字符數(shù)組說明字符指針和字符數(shù)組*/chp=str; /*指針指向字符數(shù)組指針指向字符數(shù)組*/putchar( *(chp+2); /*通過指針引用數(shù)組元素通過指針引用數(shù)組元素*/C語言程序設(shè)計第5章指針2.指針與字符串:指針與字符串:char *strp; /*說明字符指針說明字符指針*/strp=“Hello!”; /*指針指向字符串指針指向字符串*/puts(strp); /*通過指針引用字符串通過指針引用字符串*/說明指針時,可以同時賦初值,如:說明指針時,可以同時賦初值,如:char *strp=“Hello!”;賦值表

25、示將字符串的地址賦給指針!賦值表示將字符串的地址賦給指針!C語言程序設(shè)計第5章指針 /* example 5-7 通過指針訪問字符串常量通過指針訪問字符串常量 */ #include void main(void) char *p;/* 說明指向字符的指針說明指向字符的指針p */ int iNumOfi; p = “This is a test string”; /* 指針指向字符串常量指針指向字符串常量 */ iNumOfi = 0; while(*p!=0) if(*p = i) iNumOfi+; p+; printf(In the string the number of i = %

26、dn,iNumOfi); 【例【例5-7】統(tǒng)計字符串常量中的小寫字母】統(tǒng)計字符串常量中的小寫字母i的數(shù)量。的數(shù)量。C語言程序設(shè)計第5章指針/* example 5-8 通過指針訪問字符數(shù)組通過指針訪問字符數(shù)組 */#include void main(void) char str80, *chp; /* 說明字符數(shù)組及指向字符的指針說明字符數(shù)組及指向字符的指針 */ chp = str; /* 指針指向字符數(shù)組指針指向字符數(shù)組 */ gets(chp); while(*chp != 0) if(*chp = a & *chp = z) *chp -= 32;chp+; /* 指針指向下

27、一字符指針指向下一字符 */ puts(str); 【例【例5-8】輸入字符串,將其中小寫字母轉(zhuǎn)換成大寫字符,其余的】輸入字符串,將其中小寫字母轉(zhuǎn)換成大寫字符,其余的字符不變,輸出結(jié)果。字符不變,輸出結(jié)果。C語言程序設(shè)計第5章指針舉例:將字符串中的大寫字母轉(zhuǎn)化對應(yīng)的小寫字母。舉例:將字符串中的大寫字母轉(zhuǎn)化對應(yīng)的小寫字母。#include void main(void) char *p,s80; p=s; gets(p); for(;*p!=0;p+) if(*p=A&*p=Z) *p+=32; p=s; puts(p); C語言程序設(shè)計第5章指針舉例:將無符號的八進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制

28、整數(shù)。舉例:將無符號的八進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制整數(shù)。#include void main(void) char *p,s6; int i,n=0; p=s; gets(p); for(;*p!=0;p+) n=n*8+*p-0; printf(“%dn”,n); p指向指向s數(shù)組。數(shù)組。輸入字符串。輸入字符串。sps5560n=0*8+5-05n=5*8+5-045n=45*8+6-0366思考題:將思考題:將4位十六進(jìn)值字符串轉(zhuǎn)化為十進(jìn)制字符串。位十六進(jìn)值字符串轉(zhuǎn)化為十進(jìn)制字符串。C語言程序設(shè)計第5章指針5.4 指指 針針 數(shù)數(shù) 組和指向指針的指針組和指向指針的指針 指針是存放其它數(shù)據(jù)對象地

29、址的指針是存放其它數(shù)據(jù)對象地址的變量變量。因此,指針可以構(gòu)成。因此,指針可以構(gòu)成數(shù)數(shù)組組。每個數(shù)組元素為一個指針變量,且在內(nèi)存中連續(xù)存放。每個數(shù)組元素為一個指針變量,且在內(nèi)存中連續(xù)存放。指針數(shù)組的說明指針數(shù)組的說明說明格式:說明格式: type *數(shù)組名數(shù)組名const exp;int *p 4 ;含義是含義是在內(nèi)存中開辟空間,并指明元素所指向的對象的類型。在內(nèi)存中開辟空間,并指明元素所指向的對象的類型。p 0 p 1 p 2 p 3 數(shù)組名數(shù)組名p為數(shù)組的地址。為數(shù)組的地址。使用前必須讓各元素指向?qū)ο?。使用前必須讓各元素指向?qū)ο蟆nt i, a34, *p3;for(i=0;i3;i+)

30、p i =a i ;*(p2+1)=2; /*通過指針數(shù)組引用數(shù)組元素通過指針數(shù)組引用數(shù)組元素a21*/ C語言程序設(shè)計第5章指針 /* example 5-9 通過指針數(shù)組訪問二維數(shù)組通過指針數(shù)組訪問二維數(shù)組 */ #include void main(void) int a34; int *p3; /* 說明行數(shù)相同的指針數(shù)組說明行數(shù)相同的指針數(shù)組 */ int i,j; int iSumOfPosi,iCountOfPosi; for(i=0; i3; i+) pi = ai; /* 指針數(shù)組元素指向?qū)?yīng)的行指針數(shù)組元素指向?qū)?yīng)的行 */ for(j=0; j4; j+) scanf(%

31、d,pi + j); iSumOfPosi = 0; iCountOfPosi =0;【例【例5-9】統(tǒng)計】統(tǒng)計3行行4列整型二維數(shù)組中正數(shù)的個數(shù),并求正數(shù)的累列整型二維數(shù)組中正數(shù)的個數(shù),并求正數(shù)的累加和,輸出結(jié)果。加和,輸出結(jié)果。C語言程序設(shè)計第5章指針 for(i=0; i3; i+) for(j=0; j 0) iSumOfPosi += *(pi+j); /* 通過指針數(shù)組訪問二維通過指針數(shù)組訪問二維數(shù)組數(shù)組 */ iCountOfPosi+; printf(The sum of posi-numb in array is %dn,iSumOfPosi); printf(The num

32、ber of posi-numb in array is %dn,iCountOfPosi); C語言程序設(shè)計第5章指針指針數(shù)組的應(yīng)用舉例指針數(shù)組的應(yīng)用舉例指針數(shù)組與多維數(shù)組指針數(shù)組與多維數(shù)組 通過指針數(shù)組按數(shù)學(xué)方式輸出數(shù)組的值。通過指針數(shù)組按數(shù)學(xué)方式輸出數(shù)組的值。#include void main ( ) int i , j; int a34= 1,2,3,4, 5,6,7,8, 9,10,11,12 ; int *p3; p0 = a0; p1 = a1 ; p2 = a2; for (i=0 ; i3 ; i+) for (j=0; j4; j+) printf (“ %5d” , *

33、(pi+j); printf ( “n” ) ; 123456789 101112 p0數(shù)組數(shù)組a的二維結(jié)構(gòu)的二維結(jié)構(gòu)p1p2a0a1a2每輸出一行,打印回車。每輸出一行,打印回車。C語言程序設(shè)計第5章指針 /* example 5-10 通過指針數(shù)組訪問二維字符數(shù)組通過指針數(shù)組訪問二維字符數(shù)組 */ #include #include void main(void) char strName510,*strP5,*strTemp = NULL; int i,j; for(i=0; i5; i+) strPi = strNamei;/* 指針數(shù)組的各個元素指向字符數(shù)組的指針數(shù)組的各個元素指向字

34、符數(shù)組的對應(yīng)行對應(yīng)行 */ gets(strPi); for(i=0; i4; i+) for(j=i+1; j 0) /* 比較比較 */ 【例【例5-10】對存放于二維字符數(shù)組中的五個字符串按由小到大排序】對存放于二維字符數(shù)組中的五個字符串按由小到大排序輸出。輸出。C語言程序設(shè)計第5章指針 strTemp = strPi; strPi = strPj; strPj = strTemp; printf(The result after sort:n); for(i=0; i5; i+) puts(strPi); /* 輸出輸出 */ C語言程序設(shè)計第5章指針指針數(shù)組與多字符串指針數(shù)組與多字符

35、串通過指針數(shù)組構(gòu)成的菜單,執(zhí)行通過指針數(shù)組構(gòu)成的菜單,執(zhí)行DOS命令。命令。#include void main(void )char *command = “dir”, “time”, “date”, ch ; for ( ; ; ) do printf (“1: directoryn”) ; printf (“2:set timen” ) ; printf (“3:set daten”) ; printf (“4:quitn”) ; printf (nselection:”) ; ch =getchar( ) ; printf (“n”) ; while (ch4) ; if (ch=4)

36、 break; system (commandch-1) ; 內(nèi)層循環(huán)輸入選項內(nèi)層循環(huán)輸入選項外層循環(huán)根據(jù)選項執(zhí)行命令外層循環(huán)根據(jù)選項執(zhí)行命令執(zhí)行系統(tǒng)命令函數(shù),如執(zhí)行系統(tǒng)命令函數(shù),如:system(“dir”);dir0time0date0command0command1command23-1 2C語言程序設(shè)計第5章指針【例【例5-11】輸入】輸入0到到6的數(shù)字分別代表周日到周六,輸出英文名稱。的數(shù)字分別代表周日到周六,輸出英文名稱。/* example 5-11 字符型指針數(shù)組與字符串常量字符型指針數(shù)組與字符串常量 */#include void main(void) char *strDa

37、y7 = “Sunday”,“Monday”,“Tuesday”,Wednesday, Thursday,Friday,Saturday; int iDay; scanf(%d,&iDay); if(iDay = 0 & iDay = 6) puts(strDayiDay); else puts(Input error!); C語言程序設(shè)計第5章指針指向指針的指針指向指針的指針 如果指針變量的內(nèi)容存放其它指針的地址,稱該指針為指向指如果指針變量的內(nèi)容存放其它指針的地址,稱該指針為指向指針的指針。針的指針。 指向指針的指針的說明:指向指針的指針的說明:形式:形式: type *p

38、;int *p;p是一個指向整形指針的是一個指向整形指針的指針指針。#include void main ( void) int x, *p, *q ; x=10; p=&x; q=&p; printf (“%d” , * *q) ; p為指向整型的指針。為指向整型的指針。q為指向整型指針的指針。為指向整型指針的指針。xpq2000H3000H102000H3000HC語言程序設(shè)計第5章指針指向指針的指針的應(yīng)用指向指針的指針的應(yīng)用指向指針的指針一般用于多維數(shù)組和指針數(shù)組的操作。指向指針的指針一般用于多維數(shù)組和指針數(shù)組的操作。多維數(shù)組多維數(shù)組#include void main

39、( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12, ; int *arr3 = a0 , a1 , a2 ; int i ,j, *p ; p=arr ; for (i=0 ;i3; i+) for (j=0 ; i4 ; j+) printf(“%5d” , *( *(p+i)+ j ) ) ; printf (“n”) ;aiaij123456789101112a0a1a2arrarrpp+1C語言程序設(shè)計第5章指針【例【例5-12】指向指針的指針的簡單應(yīng)用?!恐赶蛑羔樀闹羔樀暮唵螒?yīng)用。/* example 5-12 通過指向指針的指針訪問簡單變量示例通過指向指

40、針的指針訪問簡單變量示例 */#include void main(void) int x,*p,*q; /* 說明變量、指針、指向指針的指針說明變量、指針、指向指針的指針 */ x = 20; p = &x; /* 指針指向變量指針指向變量 */ q = &p; /* 指向指針的指針指向指針指向指針的指針指向指針 */ printf(“x=%dn”,*q); /* 引用指向的對象引用指向的對象 */C語言程序設(shè)計第5章指針 /* example 5-13 通過指向指針的指針與指針數(shù)組訪問二維數(shù)組通過指向指針的指針與指針數(shù)組訪問二維數(shù)組 */ #include void mai

41、n(void) int a34,*p3,*pp; /* 說明二維數(shù)組及與其行數(shù)相同的指針數(shù)組說明二維數(shù)組及與其行數(shù)相同的指針數(shù)組 */ int i,j; float iAvg; for(i=0; i3; i+) pi = ai; /* 指針數(shù)組元素指向?qū)?yīng)的行指針數(shù)組元素指向?qū)?yīng)的行 */ for(j=0; j4; j+) scanf(%d,pi + j); pp = p; /* pp指向指針數(shù)組指向指針數(shù)組 */ iAvg = 0; for(i=0; i3; i+) for(j=0; j4; j+) iAvg += *(*(pp + i) +j); /* 通過通過pp訪問訪問aij */ p

42、rintf(The average of a is %fn,iAvg/12); 【例【例5-13】通過指向指針的指針與指針數(shù)組,求二維數(shù)組的平均值。】通過指向指針的指針與指針數(shù)組,求二維數(shù)組的平均值。C語言程序設(shè)計第5章指針用于處理多字符串用于處理多字符串#include void main (void) char *name = “one” , “two” , “three” , “four” ; char *p ; int i ; for ( i=0 ; i4 ; i+) p=name+i ; printf (“%sn”, *p) ; name0name1name2name3pname+ione0two0three0four0C語言程序設(shè)計第5章指針指針的類型問題指針的類型問題 通過指針可以訪問基本類型的變量及數(shù)組,指針的類型是其指通過指針可以訪問基本類型的變量及數(shù)組,指針的類型是其指向數(shù)據(jù)的類型,該類型決定了指針邏輯加一時所加的物理字節(jié)數(shù)。向數(shù)據(jù)的類型,該類型決定了指針邏輯加一時所加的物理字節(jié)數(shù)??梢詮?qiáng)制轉(zhuǎn)換指針的類型,轉(zhuǎn)換方式為:可以強(qiáng)制轉(zhuǎn)換指針的類型,轉(zhuǎn)換方式為:(type *) p#include void main( ) char a3, *p ; int y; a0=0 x12 ; a1=0 x34

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論