标题:[求助]关于函数指针
只看楼主
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
 问题点数:0 回复次数:49 
[求助]关于函数指针

这两天一直都在看孙鑫的视频,今天回来却发现精华为2了,原来是aogun指点的那个排序分析。
所以就又看了看那个函数指针的运用,慢慢才看明白了点。

现在来说说自己的理解,大家指正:

typedef TYPE (*pFUNC)(parameter);
//TYPE表示函数返回的类型。
//那么pFUNC就表示指向返回TYPE类型函数的函数指针。(pFUNC现在是一种类型)

我们可以把函数看成象变量那样。
说函数返回什么类型,我们就说他是什么类型的函数好了,方便理解。(当然,说一个函数光看他的返回类型不能确定是不是同一种类型,还要看参数类型和个数,这里为了方便说出我的观点,暂时简易表达)

假设有一个函数:TYPE fun(type);我们称这个函数是TYPE型函数。(type是一种类型)
那么&fun就是指向这个类型的函数的指针的值(即函数的地址)(记住:不理解的时候就把函数想成普通变量)。

我们说变量可以通过指向这个变量的指针来引用他,同样,我们也可以获取函数的地址来引用这个函数。


//-------函数指针赋值
因此定义一个pFUNC型的变量pf;
又因为从&fun获取函数的地址
因此,pf=&fun;可以通过pf来调用该函数。-------> pf(a);

//--------函数指针作为函数的参数
TYPE CALLFUNC(TYPE fc(type), type i)
{
fc(i);
}
先来看第一个参数是什么类型,他肯定是一个指向函数的指针(因为他右边有参数)。那么他指想的函数是什么类型的呢?-----是TYPE型的函数。
那么fc就是一个指向TYPE型函数的函数指针。
第2个参数,就是这个函数指针需要的参数了。

当然函数可以有多个参数:
举例:
typedef int (*func)(int,int);
int add(int a,int b){return a+b;}
func fc=&acc;
fc(1,2);



最后。其实你可以把 typedef int (*func)(int,int);
看成int (*func)(int,int); 在吧*func看成一个整体标识符(比如:addFunc)
那么看看:int addFunc(int ,int);
就知道func是指向addFunc这样类型的函数的指针

[此贴子已经被作者于2006-8-5 9:19:48编辑过]

搜索更多相关主题的帖子: 函数指针 类型 pFUNC TYPE 孙鑫 
2006-08-04 22:40
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
得分:0 
假设有一个函数:TYPE fun(type);我们称这个函数是TYPE型函数。(type是一种类型)
那么&fun就是指向这个类型的函数的指针的值(即函数的地址)(记住:不理解的时候就把函数想成普通变量)。

函数的名称不是应该是函数的地址吗?
2006-08-05 11:36
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
这个地方我在书上看到过,他好象是说,这里&fun和fun都是一样的,所以这里为了大家理解,才写成&fun(明显表示出是地址)。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-05 12:04
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
一个函数为void func();
&func和func其实是一样的。
//至于这个的真正原因,还需要大家指教

如果typedef void (*_F)();
_F f=&func;(在这里与_F f=func;效果一样)。
那么由于声明了一个指针,那么这个指针就有一个地址(&f),当然与那指向的函数地址(f=func=&func)不同。
所以这里&f!=f;

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-05 12:23
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
得分:0 
假设有一个函数:TYPE fun(type);我们称这个函数是TYPE型函数。(type是一种类型)
那么&fun就是指向这个类型的函数的指针的值(即函数的地址)(记住:不理解的时候就把函数想成普通变量)。

函数的名称不是应该是函数的地址吗?
2006-08-05 12:24
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
指针当声明的时候,他就已经有一个地址,new或者=是规定让他指向一个内存地址。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-05 12:28
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
得分:0 

为什么这个帖子我发了2篇?晕

2006-08-05 16:13
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-05 22:53
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
呵呵,我也想告诉你,可是我都不知道我看过书的名字,反正是没有看过名著。
而且我也试过,的确可以&fun而且值也和fun一样

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-05 23:22
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-06 06:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-82189-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.966841 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved