您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer》读书笔记(7.8,7.9)

2013-06-08 11:38 155 查看
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()的声明是等价的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: