《C++ Primer》讀書筆記(7.8,7.9)

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()的聲明是等價的 



發佈了35 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章