本文为笔者阅读《C++必知必会》一书的技术笔记
将一个函数的地址初始化或赋值给一个指向函数的指针时,无需显式地取得函数地址,编译器知道隐式地获得函数的地址,因此在这种情况下&操作符是可选的,通常省略不用。如下:
1 void ( * fp)( int ); 2 3 extern void h( int ); 4 extern int f( int ); 5 fp = f // &f的类型为 int (*)(int)而不是 void (*)(int) 6 fp = h; // OK 7 fp = & h; // OK,明确赋予函数地址
类似地,为了调用函数指针所指向的函数而对指针进行解引用操作也是不必要的,因为编译器可以帮你解引用:
( * fp)( 12 ); // 显式地解引用 fp( 12 ); // 隐式地解引用,结果相同
声明函数指针的数组:
1 int ( * afp[N])(); // 一个具有N个元素的数组,其元素类型为指向“返回值为int“的函数的指针 2 // typedef 闪亮登场 3 typedef int ( * FP)(); 4 FP afp[N];