指向函数的指针

piaomiao163 2009-02-12 04:34:48
例如:
void function_a( float a )
{
statement
}

void ( * function_pointer )( float a )

在给指针赋值的时候我看到两种形式.

1.
function_pointer = function_a;
2.
function_pointer = &function_a;

以上两种我试验过,都是可以的,但是为什么会允许两种赋值的形式出现呢~~那一种更为标准一些??
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 piaomiao163 的回复:]
对象指针.

Point * p_Point;
Point p1;
p_Point = &p1;


如果有隐式转换 就像本贴中 指向函数的指针
为何对象指针不能隐式转换呢???

p_Point = p1; 就是一句错误的话.
[/Quote]
语法上不容许这样啊
piaomiao163 2009-02-12
  • 打赏
  • 举报
回复
哦··························>_<!!!
taodm 2009-02-12
  • 打赏
  • 举报
回复
因为“规定”!
piaomiao163 2009-02-12
  • 打赏
  • 举报
回复
对象指针.

Point * p_Point;
Point p1;
p_Point = &p1;


如果有隐式转换 就像本贴中 指向函数的指针
为何对象指针不能隐式转换呢???

p_Point = p1; 就是一句错误的话.
yellowhwb 2009-02-12
  • 打赏
  • 举报
回复
函数的名称就是函数的地址,跟数组类似!对函数指针使用多次*运算,效果是一样的
例如,在C语言中:

void fsend(unsigned char * pt,int cnt);
int rs_out(unsigned char p)
{
return 0;
}
int main()
{
unsigned char p[]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
fsend(p, 5);
//(**************fsend)(p, 5);
//VC6中,换成这样,两次反编译后,汇编代码是一样的
system("pause");
return 0;
}

void fsend(unsigned char *pt,int cnt)
{
while(cnt--){
while(rs_out(*pt) == -1) ;
pt++;
}
}

因此:
function_pointer = function_a;
function_pointer = &function_a;
function_pointer = *function_a;
function_pointer = **function_a;
反编译后,汇编代码应该都是一样的!
waizqfor 2009-02-12
  • 打赏
  • 举报
回复
1.
function_pointer = function_a; //指针变量做隐式转换
2.
function_pointer = &function_a; //直接使指针指向变量地址!~

  • 打赏
  • 举报
回复
在引用函数名,但未对函数进行调用的情况下,函数名会被自动解释为指向函数的指针。
所以
1.
function_pointer = function_a;
2.
function_pointer = &function_a;
这2处,function_a等效于&function_a。
taodm 2009-02-12
  • 打赏
  • 举报
回复
不可以都标准么。
baihacker 2009-02-12
  • 打赏
  • 举报
回复
感觉是第二种

1.
用了一次function-to-pointer转换
2.
ok
sagegz 2009-02-12
  • 打赏
  • 举报
回复
我觉得第一种比较标准,Essential C++上说了,要给函数指针进行初始化,只要将函数名赋值给它就好,函数名相当于它的地址.
old-six-programmer 2009-02-12
  • 打赏
  • 举报
回复
函数名本身就代表函数地址

至于为什么,可能要问飞雪

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧