高級(jí)語(yǔ)言程序設(shè)計(jì)_第8章_第1頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第8章_第2頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第8章_第3頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第8章_第4頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第8章_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八章,善于利用指針,主要內(nèi)容,地址和指針的概念 變量的指針和指向變量的指針變量 數(shù)組與指針 字符串與指針 指向函數(shù)的指針 指針數(shù)組與指向指針的指針,問(wèn)題:從鍵盤(pán)輸入兩個(gè)整數(shù)到變量a、b中,編寫(xiě) 子函數(shù)交換兩個(gè)變量,void swap(int p,int q) int temp; temp=p;p=q; q=temp; /return ?;/只能返回一個(gè)值 #include void main( ) int a,b; scanf(%d,%d, ,解決辦法: 1.定義全局變量,但浪費(fèi)空間 且不利于模塊化結(jié)構(gòu)設(shè)計(jì); 2.使用指針,可以得到多個(gè) 返回值。,用指針來(lái)實(shí)現(xiàn),void swap(int *

2、p,int *q) int temp; temp= *p; *p=*q; *q=temp; /return ?; #include void main( ) int a,b; scanf(%d,%d, ,運(yùn)用指針變量作為參數(shù), 可以得到多個(gè)變化了的值; 又可以不浪費(fèi)內(nèi)存空間。,8.1 指針是什么,數(shù)據(jù)在內(nèi)存中是如何存儲(chǔ)的,又是如何讀取的?,內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào),這就是“地址” 。 如果在程序中定義了一個(gè)變量,在對(duì)程序進(jìn)行編譯時(shí),系統(tǒng)就會(huì)給這個(gè)變量分配內(nèi)存單元。 一個(gè)變量的地址稱(chēng)為該變量的指針。,.按變量地址存取變量值的方式稱(chēng)為“直接訪(fǎng)問(wèn)”方式,printf(“%d”,i); scanf

3、(“%d”,例如:,2. 通過(guò)間接訪(fǎng)問(wèn)來(lái)存取變量值,將變量的地址存放在另一個(gè)變量中。 在語(yǔ)言中,指針是一種特殊的變量,它是存放地址的。 假設(shè)我們定義了一個(gè)指針變量i_pointer用來(lái)存放整型變量的地址,它被分配地址為(3010)、(3011)的兩個(gè)字節(jié)。 可以通過(guò)語(yǔ)句:i_pointer ;將的地址(2000)存放到i_pointer中。這時(shí), i_pointer的值就是(2000) ,即變量所占用單元的起始地址。 要存取變量的值,可以采用間接方式:先找到存放“的地址”的變量i_pointer ,從中取出的地址(2000),然后到2000 、 200字節(jié)取出的值()。,指針和指針變量的定義:

4、,一個(gè)變量的地址稱(chēng)為該變量的“指針”。 例如,地址2000是變量的指針。 如果有一個(gè)變量專(zhuān)門(mén)用來(lái)存放另一變量的地址(即指針),則它稱(chēng)為“指針變量”。上述的i_pointer就是一個(gè)指針變量。 指針變量的值(即指針變量中存放的值)是地址(即指針)。,8.2 指針變量,C中用符號(hào)“*”來(lái)聯(lián)系指針變量和它所指向的變量,如果已定義i_pointer為指針變量,則(*i_pointer)是i_pointer所指向的變量,它和i是同一回事。 例如:,8.2 怎么定義指針變量,定義指針變量的一般形式為 基類(lèi)型 *指針變量名; 下面都是合法的定義: float *pointer_; / pointer_是指向

5、float型變量的指針變量 char *pointer_; /pointer_是指向字符型變量的指針變量,指針變量的賦值,可以用賦值語(yǔ)句使一個(gè) 指針變量得到另一個(gè)變 量的地址,從而使它指 向一個(gè)該變量。如: pointer_; pointer_;,在定義指針變量時(shí)要注意兩點(diǎn):,指針變量前面的“*”,表示該變量的類(lèi)型為指針型變量。 例: float *pointer_1; 指針變量名是pointer_1 ,而不是* pointer_1 。 在定義指針變量時(shí)必須指定基類(lèi)型。 需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。下面的賦值是錯(cuò)誤的 float a; int * po

6、inter_1; pointer_1= /* 將float型變量的地址放到指向整型變量的指針變量中,錯(cuò)誤 */,8.3 怎樣引用指針變量,請(qǐng)牢記,指針變量中只能存放地址(指針), 不要將一個(gè)整數(shù)(或任何其他非地址類(lèi)型的數(shù)據(jù))賦給一個(gè)指針變量。,例8. 通過(guò)指針變量訪(fǎng)問(wèn)整型變量,#include voidmain ( ) int ,; int*pointer_, *pointer_; ; pointer_;/*把變量的地址賦 給pointer_1 */ pointer_;/*把變量的地址 賦給pointer_ */ printf(%,%,); printf(%,%,*pointer_, *poi

7、nter_); ,對(duì)“”和“*”運(yùn)算符說(shuō)明:,如果已執(zhí)行了語(yǔ)句 pointer_; * pointer_的含義是什么?“”和“*”兩個(gè)運(yùn)算符的優(yōu)先級(jí)別相同,但按自右而左方向結(jié)合,因此先進(jìn)行* pointer_的運(yùn)算,它就是變量,再執(zhí)行運(yùn)算。因此,* pointer_與相同,即變量a的地址。 *的含義是什么?先進(jìn)行運(yùn)算,得的地址,再進(jìn)行*運(yùn)算。即所指向的變量,也就是變量a。*和*pointer_的作用是一樣的,它們都等價(jià)于變量。即*與等價(jià)。,對(duì)“”和“*”運(yùn)算符說(shuō)明:,(*pointer_)相當(dāng)于。 注意括號(hào)是必要的,如果沒(méi)有括號(hào),就成為了*pointer_,從附錄可知:+和*為同一優(yōu)先級(jí)別,而

8、結(jié)合方向?yàn)樽杂叶?,因此它相?dāng)于*(pointer_)。 由于+在pointer_1的右側(cè),是“后加”,因此先對(duì)pointer_的原值進(jìn)行*運(yùn)算,得到的值,然后使pointer_的值改變,這樣pointer_不再指向了。,例8 . 2 輸入和兩個(gè)整數(shù),按先大后小的順序輸出和。,#include void main() int *1,*2,*,; scanf(,); 1; if() ; printf(=,=,); printf(max=,min=,*1,*2); ,交換前(a)和交換后(b)的情況,8.3 指針變量作為函數(shù)參數(shù),指針類(lèi)型的數(shù)據(jù)可以 作為函數(shù)的參數(shù),將 一個(gè)變量的地址傳送 到另一個(gè)

9、函數(shù)中,例8 . 3 對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出,void swap(int *p1,int *p2) int temp; temp= *p1;*p1=*p2;*p2=temp; #include void main( ) int a,b,*pointer_1,*pointer_2; scanf(%d,%d, ,指針變量作為函數(shù)參數(shù),不可能通過(guò)執(zhí)行調(diào)用函數(shù)來(lái)改變實(shí)參指針變量的值,例8 . 4 對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出,void swap(int *p1,int *p2) int *p; p= p1;p1=p2;p2=p; #include void main( ) int a,b,*

10、pointer_1,*pointer_2; scanf(%d,%d, ,例8.5 輸入、 3個(gè)整數(shù),按大小順序輸出,void swap(int *p,int *q) int temp; temp= *p;*p=*q;*q=temp; void exchange(int *q1, int *q2,int *q3) if(*q1 *q2) swap(q1,q2); if(*q1 *q3) swap(q1,q3); if(*q2 *q3) swap(q2,q3); ,#include void main( ) int a,b,*pointer_1,*pointer_2; scanf(%d,%d, ,

11、運(yùn)用指針變量作為參數(shù), 可以得到多個(gè)變化了的值,8.3 數(shù)組與指針,一個(gè)變量有地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址。所謂數(shù)組元素的指針就是數(shù)組元素的地址。 指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組元素(把某一元素的地址放到一個(gè)指針變量中),也就是指向數(shù)組元素的指針。 引用數(shù)組元素可以用下標(biāo)法(如a3),也可以用指針?lè)ǎ赐ㄟ^(guò)數(shù)組元素的指針找到所需的元素。使用指針?lè)苁鼓繕?biāo)程序質(zhì)量高(占內(nèi)存少,運(yùn)行速度快)。,8.3.1 數(shù)組元素的指針,定義一個(gè)指向數(shù)組元素的指針變量的方法,與 以前介紹的指向變量的指針變量相同。例如: ; (定義為包含個(gè)整型數(shù)據(jù)

12、的數(shù)組) *; (定義為指向整型變量的指針變量) 應(yīng)當(dāng)注意,如果數(shù)組為型,則指針變量的基類(lèi)型亦應(yīng)為型。,對(duì)該指針變量賦值:;(p=a;)把元素的地址賦給指針變量。,也就是使指 向數(shù)組的 第號(hào)元素, 如圖:,8.2 在引用數(shù)組元素時(shí)指針的運(yùn)算,當(dāng)指針指向數(shù)組元素時(shí),可以對(duì)指針進(jìn)行加和減的運(yùn)算: () 如果指針變量P已指向數(shù)組中的一個(gè)元素,則P+1指向同一數(shù)組中的下一個(gè)元素,p-1指向同一數(shù)組中的上一個(gè)元素; () 如果p的初值為 int , ,; printf(The original array:); for(;) printf (,); printf(); inv (,); printf(T

13、he array has been in verted:); for(;) printf (,); printf (); ,void inv(int x ,int ) /*形參x是數(shù)組名*/, int temp,(); for(;) ; temp; ; temp; return; ,對(duì)這個(gè)程序可以作一些改動(dòng)。將函數(shù)inv中的形參改成指針變量。,void inv(int *,int ) /*形參x為指針變量*/ int,temp,*,*,(); ; for(;,) emp*;*;*temp; return; ,說(shuō)明:,C語(yǔ)言調(diào)用函數(shù)時(shí)虛實(shí)結(jié)合的方法都是采用“值傳遞”方式,當(dāng)用變量名作為函數(shù)參數(shù)時(shí)

14、傳遞的是變量的值,當(dāng)用數(shù)組名作為函數(shù)參數(shù)時(shí),由于數(shù)組名代表的是數(shù)組首元素地址,因此傳遞的值是地址。 實(shí)際上,C編譯都是將形參數(shù)組名作為指針變量來(lái)處理的。 在函數(shù)被調(diào)用時(shí),系統(tǒng)會(huì)建立一個(gè)和形參對(duì)應(yīng)的指針變量,用來(lái)存放從主調(diào)函數(shù)傳遞過(guò)來(lái)的實(shí)參數(shù)組首元素的地址。 如果有一個(gè)實(shí)參數(shù)組,想在函數(shù)中改變此數(shù)組中的元素的值,實(shí)參與形參的有種對(duì)應(yīng)關(guān)系,例109 用選擇法對(duì)個(gè)整數(shù)按由大到小順序排序,#include void main() void sort(int ,int ); int*,10; ; for(;) scanf(,); ; sort(,); for(,;) (,*); ,void sort(i

15、nt ,int ), int ,; for(;) ; for(;) () ; (?。?; ; ,8.5 通過(guò)指針引用多維數(shù)組,多維數(shù)組元素的地址 指向多維數(shù)組元素的指針變量 用指向多維數(shù)組的指針作函數(shù)參數(shù),1.多維數(shù)組元素的地址,二維數(shù)組可以認(rèn)為是“數(shù)組的數(shù)組”,例 : 定義int a34=1,3,5,7, , ,; 則二維數(shù)組a是由3個(gè)一維數(shù)組所組成的。設(shè)二維數(shù)組的首 行的首地址為,則,例8.1 輸出二維數(shù)組有關(guān)的值,#include define FROMAT, void main() int 341,3,5,7,9, ,; printf(,*); printf(,0 , *(); pri

16、ntf(,0,00); printf(,1,); printf(,10,*(+)+); printf(,*(); printf(,); printf(,*(*(1); ,2 . 指向多維數(shù)組元素的指針變量(1) 指向數(shù)組元素的指針變量,例8.12 用指針變量輸出二維數(shù)組元素的值,#include void main() int 341,3,5,7,9,11,13,15,17,19,21,23; int*; for(;) () printf(); printf(,*); ,(2) 指向由個(gè)元素組成的一維數(shù)組的指針變量,例8.13 輸出二維數(shù)組任一行任一列元素的值,#include void ma

17、in ( ) int 1,3,5,7,9,11, 13,15,; int (*),; ; scanf( ,); printf(, ,*(*(); ,3. 用指向數(shù)組的指針作函數(shù)參數(shù),例8.14 有一個(gè)班,個(gè)學(xué)生,各學(xué)門(mén)課,計(jì)算總平均分?jǐn)?shù)以及第個(gè)學(xué)生的成績(jī)。用函數(shù)求總平均成績(jī),用函數(shù)找出并輸出第個(gè)學(xué)生的成績(jī)。,用指針變量作形參來(lái)接受實(shí)參數(shù)組名傳遞來(lái)的地址: (1)用指向變量的指針變量; (2)用指向一維數(shù)組的指針變量;,C程序?qū)崿F(xiàn):,#include void main() void average(float *p,int n); void search(float (*p)4,int n);

18、 float score34=65,67,70,60,80, 87,90,81,90,99,100,98; average(*score,12);*求12個(gè)分?jǐn)?shù)的平均分* search(score,);*求序號(hào)為的學(xué)生的成績(jī)* , float*_; float ,; _; (;_;) (*); ; printf(average,aver); ,void average(float *,int ),void search(float (*)4,int ) / * p是指向具有4個(gè)元素的一維數(shù)組的指針 */,int ; printf(the score of No. % are:,); for(;

19、) printf(5.2,*(*(); ,例8.5 在上題基礎(chǔ)上,查找有一門(mén)以上課程不 及格的學(xué)生,打印出他們的全部課程的成績(jī)。,#include void main() void search(float (*p)4,int n);/*函數(shù)聲明*/ float score34=65,57,70,60,58,87, 90,81,90,99,100,98; search(score,); ,int ,; for(;) flag; for(;) if(*(*())flag; if() printf(No.%d fails,his scores are:n,j+1); for(;) printf(%

20、.,*(*(); printf(); ,void search(float (*p)4,int ),說(shuō)明:,通過(guò)指針變量存取數(shù)組元素速度快,且程序簡(jiǎn)明。 用指針變量作形參,所處理的數(shù)組大小可以變化。 使用指針可以使程序質(zhì)量提高,且編寫(xiě)程序方便靈活。,8. 字符串與指針 8.4.1字符串的表示形式,(1) 用字符數(shù)組存放一個(gè)字符串,例 8.6 定義一個(gè)字符數(shù)組,對(duì)它初始化, 然后輸出該字符串,#include void main() char string ??; printf(,); ,string是數(shù)組名,代表數(shù)組的首元素的地址,(2) 用字符指針指向一個(gè)字符串,例8.7 定義字符指針,#in

21、clude void main() char*string” !”; printf(,); ,例8.8 將字符串復(fù)制為字符串,#include void main( ) char ”I am a boy.”,20; int ; for(;*()??;) *()*(); *(); printf(string a is :,); printf( :); for(;??;) printf(,); printf(); ,對(duì)字符串中字符的存取,可以用下標(biāo)方法, 也可以用指針?lè)椒?例8.9 用指針變量來(lái)處理例88問(wèn)題。,#include void main() char =“I am a boy. “,20,

22、*p1,*p2;int i; ; for(;*??;p1,p2) *; *; printf(string is:,); printf( :); for(;??;) printf(,); printf(); ,也可以用指針變量指向字符串的字符,8. 字符指針作函數(shù)參數(shù),例820 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制,(1) 用字符數(shù)組作參數(shù),#include void main() void copy_string(char from , char to ); char a = am a teacher; char =you are a student; printf(“string a= string ,a

23、,b); printf(copy string a to string b:n ); copy_string (,); printf(nstring a=%snstring b=%sn,a,b); ,void copy_string(char from , char to) int ; while(?。?; ; ,()用字符指針變量作實(shí)參,#include void main() void copy_string(char *, char *); char * am a teacher .; char *you are a student ; printf(string a= ,a,b); p

24、rintf(copy string a to string b:n ); _(,); printf(nstring a=%snstring b=%sn,a,b); ,(3)用字符指針變量作形參和實(shí)參,#include void main() void copy_string(char *, char *); char * am a teacher .; char *you are a student ; printf(string a= ,a,b); printf(copy string a to string b:n ); _(,); printf(nstring a=%snstring b

25、=%sn,a,b); ,void copy_string(char *,char *) for(;*from??;from,to) *; *; ,8. 對(duì)使用字符指針變量和字符數(shù)組的比較,(1) 字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是地址(字符串第1個(gè)字符的地址),決不是將字符串放到字符指針變量中。 (2)賦值方式。對(duì)字符數(shù)組只能對(duì)各個(gè)元素賦值,不 能用以下辦法對(duì)字符數(shù)組賦值。 char str; str ??; 而對(duì)字符指針變量,可以采用下面方法賦值: char*; ?。?但注意賦給的不是字符,而是字符串第一個(gè)元素 的地址。,(3)對(duì)字符指針變量賦初值:,cha

26、r * love China??;等價(jià)于 char*; ??; 而對(duì)數(shù)組的初始化: char str love China!; 不能等價(jià)于 char str; str ??; 數(shù)組可以在定義時(shí)整體賦初值,但不能再賦值語(yǔ)句中整體賦值,(4)指針變量要先賦值,再引用,如: char str; scanf(,str);是可以的。 而常有人用下面的方法,目的是想輸入一個(gè)字符串,雖然一般也能運(yùn)行,但這種方法是危險(xiǎn)的 : char*; scanf(,);,應(yīng)當(dāng)這樣: *,; ; (,);,(5) 指針變量的值是可以改變的,例8.1改變指針變量的值,#include void () char*I love Chi

27、na??; ; printf(,); ,(6)字符指針變量指向的字符串常量中的內(nèi)容不可以被取代,Char a=“House”; Char *b=“House”; A2=r; B2=r; /非法,( 7)只有指針變量指向數(shù)組時(shí)才可用下標(biāo)引用數(shù)組元素 (8)可以用指針變量指向格式字符串,作業(yè):,輸入10個(gè)整數(shù),將其中最大的數(shù)與第一個(gè)數(shù)對(duì)換,把最小的數(shù)與最后一個(gè)數(shù)對(duì)換。寫(xiě)3個(gè)函數(shù): (1)輸入10個(gè)數(shù); (2)對(duì)換處理; (3)輸出10個(gè)數(shù)。 要求用指針?lè)椒ㄌ幚怼?提示:找出最大數(shù)和最小數(shù)并本別用指針max和min進(jìn)行指向,然后將max指向的元素與a0元素對(duì)調(diào),將min指向的元素與a9對(duì)調(diào)。,作業(yè):,

28、2. 有10個(gè)整數(shù),要求將前面各數(shù)順序向后移動(dòng)5個(gè)位置,使最后的5個(gè)數(shù)變成最前面的5個(gè)數(shù)。寫(xiě)一個(gè)函數(shù)實(shí)現(xiàn)以上的功能,在主函數(shù)中輸入10個(gè)整數(shù)和輸出調(diào)整后的10個(gè)整數(shù)。 提示:用指針變量p指向數(shù)組a10,設(shè)置一個(gè)循環(huán)(循環(huán)變量i取值0-4),將p+i與p+5+i位置元素對(duì)調(diào)即可。,作業(yè):,3. 編寫(xiě)三個(gè)子函數(shù),分別實(shí)現(xiàn)下面的功能: (1)子函數(shù)void input_matrix(double ANN)從鍵盤(pán)輸入一個(gè)二維矩陣A; (2)子函數(shù)void output_matrix(double ANN)輸出一個(gè)二維矩陣A到屏幕; (3)子函數(shù) void multiply_matrix(double

29、ANN, double BNN,double CNN)計(jì)算矩陣A與B的乘積C; 主函數(shù)調(diào)用三個(gè)子函數(shù)進(jìn)行測(cè)試。,8. 指向函數(shù)的指針,8. 什么是函數(shù)指針,如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),編譯系統(tǒng)為 函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的起始地址 (又稱(chēng)為入口地址)稱(chēng)為這個(gè)函數(shù)的指針。 可以定義一個(gè)指向函數(shù)的指針變量,指向該函數(shù),如, int (*p)(int,int);,可以用一個(gè)指針變量指向某個(gè)函數(shù),然后通過(guò)該指針變 量調(diào)用此函數(shù)。,8.2 用函數(shù)指針變量調(diào)用函數(shù),例8.2 求和中的大者。先列出按一般 方法的程序。,#include voidmain() int max(int,i

30、nt); int ,; scanf(,); (,); printf(”, “,a,b,c); int max(int ,int ) int ; if(); else ; return(); ,#include voidmain() int (int,int); int (*)(int,int); int ,; ; scanf(,); (*)(,); printf(, ,); ,用一個(gè)指針變量指向一個(gè)函數(shù), 將 main 函數(shù)改寫(xiě)為:,8.3 怎么樣定義和使用指向函數(shù)的指針變量,通過(guò)指針變量根據(jù)不同情況先后調(diào)用不同的函數(shù),例8.3 輸入兩個(gè)整數(shù),然后讓用戶(hù)選擇1或1,選1時(shí)調(diào)用max函數(shù),輸出二

31、者當(dāng)中的大數(shù),選2時(shí)調(diào)用min函數(shù),輸出二者中的小數(shù)。,用指針變量使程序更簡(jiǎn)潔和專(zhuān)業(yè),8.4 用指向函數(shù)的指針作函數(shù)參數(shù),指向函數(shù)的指針變量常用的用途之一是把函數(shù)的地址作 為參數(shù)傳遞到其他函數(shù),以便能夠在被調(diào)用的函數(shù)中使 用實(shí)參函數(shù)。,實(shí)參函數(shù)名 f1 void fun(int (*x1)(int),int (*x2)(int,int)) int ,; (*)(); *調(diào)用函數(shù)* (*)(,);*調(diào)用函數(shù)* ,例8.4 輸入兩個(gè)整數(shù)a和b,由用戶(hù)輸入1,2或3。如果輸入1,程序輸出a,b當(dāng)中的大數(shù),如果輸入2,程序輸出a,b中的小數(shù),輸入3,則求a與b之和。,說(shuō)明:,使用指向函數(shù)的指針變量作為

32、函數(shù)參數(shù),可以 大大增加函數(shù)使用的靈活性??梢跃帉?xiě)一個(gè)通用的函數(shù)來(lái)實(shí)現(xiàn)各種專(zhuān)用的功能。 對(duì)作為實(shí)參的函數(shù),應(yīng)在主調(diào)函數(shù)中用函數(shù)原型作函數(shù)聲明。,8. 返回指針值的函數(shù),一個(gè)函數(shù)可以帶回一個(gè)整型值、字符值、實(shí)型值等,也可以帶回指針型的數(shù)據(jù),即地址。 這種帶回指針值的函數(shù),一般定義形式為 類(lèi)型名 *函數(shù)名(參數(shù)表列); 例如: *(int ,int );,例8.25 有若干個(gè)學(xué)生的成績(jī)(每個(gè)學(xué)生有門(mén)課程),要求在用戶(hù)輸入學(xué)生序號(hào)以后,能輸出該學(xué)生的全部成績(jī)。用指針函數(shù)來(lái)實(shí)現(xiàn)。,#include void main() float score 4=60,70,80,90, 56,89,67,88,3

33、4,78,90,66; float*search(float (*pointer)4,int n); float*; int ,; printf(enter the number of student:); scanf(,); printf(The scores of No are:,); search(,); for(; printf(,*(); ,子函數(shù):,float * search(float (*pinter)4,int ) float *; *(); return(); ,運(yùn)行情況如下: enter the number of student: The scores of No.

34、are: 56.00 89.00 67.00 88.00,8.指針數(shù)組和多重指針,8. 什么是指針數(shù)組 一個(gè)數(shù)組,若其元素均為指針類(lèi)型數(shù)據(jù),稱(chēng)為指針數(shù)組,也就是說(shuō),指針數(shù)組中的每一個(gè)元素都相當(dāng)于一個(gè)指針變量。一維指針數(shù)組的定義形式為 類(lèi)型名*數(shù)組名數(shù)組長(zhǎng)度; 例如: *;,例87 將若干字符串按字母順序(由小到大)輸出。,#include #include void main() void sort(char *name ,int n); void printf(char *name ,int n); char *name =“Follow me”,“BASIC”,“Great Wall, F

35、ORTRAN,Computer design; int ; sort(,); print(,); ,char *; int ,; for(;) ; for(;) if(strcmp(name,name)0)=; if(!) temp=namei; namei=namek; namek=temp; ,void sort(char * ,int ),void print(char * ,int ) ; (;) printf(,); ,子函數(shù):,運(yùn)行結(jié)果為: ,8.7.2 指向指針的指針,指向指針數(shù)據(jù)的指針變量,簡(jiǎn)稱(chēng)為指向指針的指針。 怎樣定義一個(gè)指向指針數(shù)據(jù)的指針變量呢?如下: *; 的前面有兩個(gè)*號(hào)。*運(yùn)算符的結(jié)合性是從右到左,因此*相當(dāng)于*(*),顯然*是指針變量的定義形式。如果沒(méi)有最前面的*,那就是定義了一個(gè)指向字符數(shù)據(jù)的指針變量?,F(xiàn)在它前面又有一個(gè)*號(hào),表示指針變量是指向一個(gè)字符指針變量的。*就是所指向的另一個(gè)指針變量。,例8.8 使用指向指針的指針,#include void main() char *name=Follow me,BASIC,Great Wall,F(xiàn)ORTRAN,Computer design; char *; int ; for(;)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論