計算機概論:C/C++程式設計
|
第6章 模組化的程式設計基礎:函式 |
|
|
授課教師:陳慶瀚 WWW : http://www.miat.ee.isu.edu.tw/cpp E-mail : pierre@isu.edu.tw |
|
6.6指標與函式的關係 傳遞字串 /*----------------------------------------------------*/ // 範例程式6-12 // 傳入一個字串指標,傳出字串長度 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h> int getSize(char *ptr); void main() { int nLen; char *str =
"elephant"; // 字串指標 nLen = getSize(str);
// 傳回長度 cout<<"elephant有"<<nLen<<"個字元\n"; } int getSize (char *ptr) { int i = 0; while(ptr[I] != ‘\0’) { i++; } return i; } 傳遞陣列 我們可以將一個陣列傳入函式內,由於傳遞方法是將陣列的位址傳入,所以效率很高。同時該陣列在函式內所使用的記憶體與函式外是相同的,因此一旦在函式內修改了陣列內容,離開函式之後仍將維持修改過的內容。 /*----------------------------------------------------*/ // 範例程式6-13 // 傳入一個陣列,修改後傳出 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h> void change(char []); void main() { char sData[10] = "C++程式";
cout<<"函式呼叫前的名字
: "<<sData<<endl; // 輸出原來名字 change(sData); cout<<"函式呼叫前的名字 : "<<sData<<endl; // 輸出修改後的名字 } void change(char sData[20]) { cout<<"請輸入新的字串:"); cin>>sData; } 傳遞函數的位址 每個變數都有配置特定的記憶體位置,每個陣列也都有配置特定的記憶體位置,那麼函式是不是配置有記憶體位址?答案是肯定的。每個函式都有它的記憶體位置,我們可以使用函式的記憶體位置將一個函式傳入另一個函式中。但是要怎麼做? 首先,我們宣告一個函式的指標變數,用來存放函式的記憶體位址, 例如 int (*ptr)(int,int); 接著就可以把這個指標變數指向所有相同宣告原型的函式(具有兩個int資料型別的傳遞參數和int傳回型別)。 /*----------------------------------------------------*/ // 範例程式6-14 // 使用函式的記憶體位置 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h> int add(int,int); int sub(int,int); void main() { int (*ptr)(int,int); // 宣告一個指向函式的指標 int a,b,c; cout<<”輸入任意整數a和b”; cin>>a>>b; ptr = add; // 將ptr指向函式add c=(*ptr)(a,b); // 使用ptr所指向的函式,ptr指向add,所以c=add(a,b); cout<<"a+b =
"<<c<<endl; ptr = sub; // 將ptr指向函式sub c=(*ptr)(a,b); // 使用ptr所指向的函式,ptr指向sub,所以c=sub(a,b); // ptr指向sub,所以c=sub(a,b); cout<<"a-b =
"<<c<<endl; } int add(int a,int b) { return (a+b); } int sub(int a,int b) { return (a-b); } |
||
計算機概論:C/C++程式設計 義守大學電機系 陳慶瀚 |