main()處理命令行選項
通常 在執行程序時 我們會傳遞命令行選項 例如 我們可能寫如下命令行
prog -d -o ofile data0
如果用戶已在命令行中指定了選項的話 那麼我們可以通過main()函數的一種擴展原型特徵來訪問這些選項
int main( int argc, char *argv[] ) { ... }
argc 包含命令行選項的個數 argv 包含aygc 個C 風格字符串 代表了由空格分隔的命令選項 例如 對於如下命令行
prog -d -o ofile data0
argc 被設置爲5 且argv 被設置爲下列C 風格字符串
argv[ 0 ] = "prog";
argv[ 1 ] = "-d";
argv[ 2 ] = "-o";
argv[ 3 ] = "ofile";
argv[ 4 ] = "data0";
=================外鏈幫助理解=============== http://bbs.csdn.net/topics/390037804指向函數的指針
假定我們被要求提供一個如下形式的排序函數
sort( start, end, compare );
int (*pf)( const string &, const string & ); // ok: 正確
這個語句聲明瞭pf 是一個指向函數的指針,該函數有兩個參數和int 型的返回值,即指向函數的指針 我們知道,不帶下標操作符的數組名會被解釋成指向首元素的指針。當一個函數名沒有被調用操作符修飾時,會被解釋成指向該類型函數的指針。例如,表達式
lexicoCompare;
被解釋成類型
int (*)( const string &, const string & );
的指針將取地址操作符作用在函數名上也能產生指向該函數類型的指針。因此 lexicoCompare和&lexioCompare 類型相同 指向函數的指針可如下被初始化
int (*pfi)( const string &, const string & ) = lexicoCompare;
int (*pfi2)( const string &, const string & ) = &lexicoCompare;
調用
pf( ia, iaSize );
也可以用顯式的指針符號寫出
(*pf)( ia, iaSize );
函數指針的數組
我們可以聲明一個函數指針的數組 例如
int (*testCases[10])();
使用typedef 名字可以使聲明更爲易讀 例如 // typedefs使聲明更易讀
typedef int (*PFV)(); // 定義函數類型指針的 typedef
PFV testCases[10];
testCases 的這個聲明與前面的等價 函數參數的類型不能是函數類型,函數類型的參數將被自動轉換成該函數類型的指針
例如
// typedef 表示一個函數類型
typedef int functype( const string &, const string & );
void sort( string *, string *, functype );
編譯器把sort()當作已經聲明爲 void sort( string *, string *, int (*)( const string &, const string & ) );
上面這兩個sort()的聲明是等價的