导读:
我使终这么认为:要理解指向函数的指针,首先要深刻理解指向变量的指针。所以,我在写作的时候总是会拿这两者来对比。
使用指针有什么好处?作为C语言的初学者,使用指针可能是为了在函数间进行“按地址传递”,然而这叫做知其然不知其所以然。指针的本质作用是可以用一个变量来灵活地代表一组变量中的任何一个。在处理数组、链表等数据结构时,指针的这个功能就很明显地表现出来。如:
int MaxVal = *p;//假定p指向的数组有10个int型元素
for (int *i=p+1; i{
if (MaxVal < *i) MaxVal = *i;
}
那么指向函数的指针就可以用一个函数来灵活地代表一组函数中的任一个。如果只须代表一个函数,则根本不用这么麻烦。下面的问题是,怎样让一个指向函数的指针与某一个函数挂勾?怎样用这个指针来调用该函数?
int Bigger(int i)
{
return i+1;
}
int Smaller(int i)
{
return i-1;
}
typedef int (*cmpFun)(int);
cmpFun p1;
接下来p1这个指针就可以随时与Bigger或Smaller挂勾、随时可以用来调用这两个函数了。用行话说就是“给指针赋值”和“通过指针调用函数”,不过这个赋值和调用与“指向变量的指针”略有区别,区别在于更灵活,灵活到了不用“&”和“*”也能取地址和取对象的地步:
p1 = &Bigger;//可以,用&来表示取函数的地址
p1 = Smaller;//也可以不用&,如果函数名后不带参数,就表示取它的地址
(*p1)(3);//可以,用*给指针解引用然后再调用
p1(4);//也可以不用*,不用解引用而直接调用
引用:直接引用函数名等效于在函数名上应用取地址操作符。
引用:可以不需要使用解引用操作符,直接通过指针调用函数。
指针的值还有一个特殊值:0,如果给它赋0值,则表示它不指向任何函数,不能用该指针来调用函数。这个道理与指向变量的指针一样。
本文转自
http://toumao.blog.sohu.com/12751968.html
我使终这么认为:要理解指向函数的指针,首先要深刻理解指向变量的指针。所以,我在写作的时候总是会拿这两者来对比。
使用指针有什么好处?作为C语言的初学者,使用指针可能是为了在函数间进行“按地址传递”,然而这叫做知其然不知其所以然。指针的本质作用是可以用一个变量来灵活地代表一组变量中的任何一个。在处理数组、链表等数据结构时,指针的这个功能就很明显地表现出来。如:
int MaxVal = *p;//假定p指向的数组有10个int型元素
for (int *i=p+1; i{
if (MaxVal < *i) MaxVal = *i;
}
那么指向函数的指针就可以用一个函数来灵活地代表一组函数中的任一个。如果只须代表一个函数,则根本不用这么麻烦。下面的问题是,怎样让一个指向函数的指针与某一个函数挂勾?怎样用这个指针来调用该函数?
int Bigger(int i)
{
return i+1;
}
int Smaller(int i)
{
return i-1;
}
typedef int (*cmpFun)(int);
cmpFun p1;
接下来p1这个指针就可以随时与Bigger或Smaller挂勾、随时可以用来调用这两个函数了。用行话说就是“给指针赋值”和“通过指针调用函数”,不过这个赋值和调用与“指向变量的指针”略有区别,区别在于更灵活,灵活到了不用“&”和“*”也能取地址和取对象的地步:
p1 = &Bigger;//可以,用&来表示取函数的地址
p1 = Smaller;//也可以不用&,如果函数名后不带参数,就表示取它的地址
(*p1)(3);//可以,用*给指针解引用然后再调用
p1(4);//也可以不用*,不用解引用而直接调用
引用:直接引用函数名等效于在函数名上应用取地址操作符。
引用:可以不需要使用解引用操作符,直接通过指针调用函数。
指针的值还有一个特殊值:0,如果给它赋0值,则表示它不指向任何函数,不能用该指针来调用函数。这个道理与指向变量的指针一样。
本文转自
http://toumao.blog.sohu.com/12751968.html