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()的声明是等价的