C语言问题!

[复制链接]
3198|13
 楼主| areshan 发表于 2010-10-26 14:58 | 显示全部楼层 |阅读模式
问问各位大侠:C语言中能够把函数名(也就是函数入口地址)存放在数组中吗????这样就可以用数组赋值给指向函数的指针调用不同的函数了!!!!要是能这个数组该是什么类型呢?
wade104 发表于 2010-10-26 16:10 | 显示全部楼层
我不知道这样行不,但是你可以用函数指针,同样可以实现这个的功能。。。不知道对你有帮助没。
fzu_csc 发表于 2010-10-26 16:24 | 显示全部楼层
可以。

函数指针数组。
ayb_ice 发表于 2010-10-26 16:46 | 显示全部楼层
指针数组
 楼主| areshan 发表于 2010-10-26 17:13 | 显示全部楼层
int (*mm[4])(int,int)={max,add,middle,min};指向函数的指针数组!!!!
要是这样,我就定义了4个函数指针,每个函数指针都给了指向的地址。。。。。。。


我想问的是,C语言里,有没有地址够成的数组,像是用函数名构成的数组????????????
像int num[]={0x01,0x02,0x03};一样这样的数组。。。不是用地址给指针赋值!
caoquanli 发表于 2010-10-26 17:19 | 显示全部楼层
1# areshan
这个是可以的。你看是这个意思吗?

#include<stdio.h>
typedef void (*point_fun[3])();
void fun1()
{
printf("this is point fun1\n");
}
void fun2()
{
printf("this is point fun2\n");
}
void fun3()
{
printf("this is point fun3\n");
}
void main()
{
point_fun p;
p[0]=fun1;
p[1]=fun2;
p[2]=fun3;
p[0]();
p[1]();
p[2]();

}

我在vc6.0下运行是正确的
}
 楼主| areshan 发表于 2010-10-26 17:36 | 显示全部楼层
谢谢你,原来typedef void (*point_fun[3])();可以用point_fun来代替,还没有用过,谢谢你。。。。你写的指向函数的指针数组,然后在给每个数组一个函数名。。。。
6# caoquanli
shell.albert 发表于 2010-10-26 18:43 | 显示全部楼层
指针就是地址,数组也是一块地址区域,所以可以定义一块区域用于存放多个指针,即指针数组。
batsong 发表于 2010-10-26 21:11 | 显示全部楼层
typedef void (*point_fun[3])();
p[0]=fun1;

但我记得好像返回值和形参与类型定义不同就不可以赋值,有点局限性,并不是所有函数入口都能放进同一个数组
 楼主| areshan 发表于 2010-10-27 09:06 | 显示全部楼层
对的,指向函数的指针数组只能是指向一定格式的函数,(返回值,和形参要一样)。 10# batsong
jack_shine 发表于 2010-10-27 09:20 | 显示全部楼层
程序还是要可读性要好,通俗易懂些
tanybin 发表于 2010-10-27 13:07 | 显示全部楼层
可以。其实现在很多芯片提供的片上IAP,已经集成芯片上的驱动入口地址都是这样处理得。比如LPC11C14上的CAN驱动,就是这样。
cloudreaching 发表于 2010-10-27 14:01 | 显示全部楼层
地址也是数据,数据也可以是地址,因此都一样,就是一个叫法而已
lvdou5566 发表于 2010-10-27 15:56 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部