函数指针数组

snowflame 2008-07-01 10:24:47
#include "stdafx.h"

void max(int i, int j, int *k)
{
if (i > j)
*k = i;
else
*k = j;
}

void min(int i, int j, int *k)
{
if (i > j)
*k = j;
else
*k = i;
}

void (*pFuncA[2])(int, int, int *) = {max, min};

int main(int argc, char* argv[])
{
int i, j;
int k;

int tmp1[3] = {1, 2, 3};

i = 1;
j = 2;

pFuncA[0](tmp1[0], tmp1[1], &k);

pFuncA[1](tmp1[0], tmp1[1], &k);

(*pFuncA[1])(i, j, &k);

return 0;
}

在这个程序里使用pFuncA[1]和(*pFuncA[1])都可以正确地调用min函数,请问这两种方式有什么不同?
...全文
236 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
FLxyzsby 2008-07-01
  • 打赏
  • 举报
回复
前者是C++的标准写法
后者是C的标准写法
在C++编译器中,都能被接受
但是在纯C编译器里面,C++的写法不能被接受
bo.cui 2008-07-01
  • 打赏
  • 举报
回复
当然,这个输出有可能是编译器处理过的。。
bo.cui 2008-07-01
  • 打赏
  • 举报
回复
看了半天,没弄明白
试验:

#include "stdio.h"

void max(int i, int j, int *k)
{
puts("max");
}

void min(int i, int j, int *k)
{
puts("min");
}

void (*pFuncA[2])(int, int, int *) = {max, min};

int main(int argc, char* argv[])
{
printf("%x %x %x\n",pFuncA[0],*pFuncA[0],*max);
printf("%x %x %x\n",pFuncA[1],*pFuncA[1],*min);
getch();
return 0;
}

输出:
401290 401290 401290
4012a4 4012a4 4012a4

这样,执行pFuncA[0] 既寻找pFuncA[0]中的内容,并从此地址(401290)执行。
*pFuncA[0]既寻找pFuncA[0]的内容(401290),然后寻找此地址所指向的地址空间(401290),开始执行。

好像401290地址的内容是401290
~~
九十度黑 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xkyx_cn 的回复:]
*pFunc
是传统用法,traditional syntax
pFunc
是非传统用法, non-traditional syntax

标准都支持,2者没有效果上的区别
[/Quote]
学习...
yc_8301 2008-07-01
  • 打赏
  • 举报
回复
应该没有任何区别,,都是指向函数的入口地址而已。。
xkyx_cn 2008-07-01
  • 打赏
  • 举报
回复
*pFunc
是传统用法,traditional syntax
pFunc
是非传统用法, non-traditional syntax

标准都支持,2者没有效果上的区别
独孤过儿 2008-07-01
  • 打赏
  • 举报
回复
函数指针是一类特殊的指针,不同于数据类型的指针,所以也不要完全用理解数据类型指针的思想来理解函数指针。只要知道函数指针的常用用法

就好了,那种“回字有四种写法”的方式,对函数指针来说毫无意义...
artman 2008-07-01
  • 打赏
  • 举报
回复
对于函数指针
*pFunc与pFunc 调用上没什么区别.
xkyx_cn 2008-07-01
  • 打赏
  • 举报
回复
对于函数指针来说,是一样的

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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