《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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章