C++:函数指针基础全面解析
[来源] 达内 [编辑] 达内 [时间]2012-09-11
函数名可以理解为该类型函数的指针。当然,取地址操作符作用于函数名上也能产生指向该类型函数的指针。也就是说下面两种赋值都是可行的。
这篇是为了加深记忆所写。发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的。
①函数指针的初始化。函数如下:
< div id="div_code" style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 4px; padding-left: 5.4pt; width: 97%; padding-right: 5.4pt; background: #e6e6e6; word-break: break-all; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 4px">1 int CompareString(const string
& str1, const string& str2)
2 {
3 return (str2);
4 }
2 {
3 return (str2);
4 }
函数的初始化有两种方式:
第一种,也是最普遍的方式:
< div id="div_code" style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 4px; padding-left: 5.4pt; width: 97%; padding-right: 5.4pt; background: #e6e6e6; word-break: break-all; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 4px">int (*CompareFunction)(const string
&, const string&)
= CompareString;
第二种,是使用typedef定义函数类型,这种写法有助于对代码的理解:
< div id="div_code" style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 4px; padding-left: 5.4pt; width: 97%; padding-right: 5.4pt; background: #e6e6e6; word-break: break-all; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 4px">typedef int (*CompareFunctionType)(const
string&, const string&
);
CompareFunctionType CompareFunction = CompareString;
CompareFunctionType CompareFunction = CompareString;
② 函数指针赋值。
函数名可以理解为该类型函数的指针。当然,取地址操作符作用于函数名上也能产生指向该类型函数的指针。也就是说下面两种赋值都是可行的:
< div id="div_code" style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 4px; padding-left: 5.4pt; width: 97%; padding-right: 5.4pt; background: #e6e6e6; word-break: break-all; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 4px">CompareFunctionType CompareFunction = CompareString;
CompareFunctionType CompareFunction = &CompareString;
CompareFunctionType CompareFunction = &CompareString;