找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1582|回复: 3

有关 指向函数的指针 的一点问题

[复制链接]
发表于 2009-11-2 04:27:03 | 显示全部楼层 |阅读模式 IP:江苏扬州
今在C++ programming language中读到以下几行代码:


typedef void (*SIG_TYP)(int); // from<signal.h>

问题1: 以前见到的typedef都是类似于"typedef NAME1 NAME2"这种形式,而第一行中似乎没有NAME2这一部分,是什么作用呢?只是想说明SIG_TYP为一个类型么?


typedef void(*PF)();
PF edit_ops[] = {&cut,&paste,&copy};

问题2: edit_ops为一个 指向函数的指针的数组,请问如果函数cut,paste,copy的型参和返回值各不相同,还有办法放在同一个指向函数的指针的数组里么?
发表于 2009-11-2 04:27:07 | 显示全部楼层 IP:江苏扬州
第一个问题:定义STG_TYP为int型;
第二个问题:PF是void类型的指针,可以存储多种返回类型的函数
回复

使用道具 举报

发表于 2009-11-2 04:27:12 | 显示全部楼层 IP:江苏扬州
谢谢阿甘的指点,但是仍有疑惑:
对于问题1:您说的“定义STG_TYP为int型”具体是指什么意思?
STG_TYP不是指向函数的指针么,与int有什么关系呢?

问题2:这样做可以么?
我按你说的做了下面的实验:

typedef void(*PF)();
void f1(int x){cout<<"int"<<endl;}
void f2(char x){cout<<"char"<<endl;}
void f3(float x){cout<<"float"<<endl;}

int main()
{
PF edit[] = {&f1,&f2,&f3};
PF* button = edit;
button[0]();
button[1]();
button[2]();
return 0;
}
得到了下面的错误:
Error 1 error C2440: 'initializing' : cannot convert from 'void (__cdecl *)(int)' to 'PF'
是不是我哪里写错了?
回复

使用道具 举报

发表于 2009-11-2 04:27:21 | 显示全部楼层 IP:江苏扬州
#include<iostream.h>
typedef void(*PF)();
void f1(){int x;cout<<"int"<<endl;}
void f2(){char x;cout<<"char"<<endl;}
void f3(){float x;cout<<"float"<<endl;}
int main()
{
PF edit[] = {&f1,&f2,&f3};
PF* button = edit;
button[0]();
button[1]();
button[2]();
return 0;
}
改成这样就行了,因为void没有返回值,所以不能像void f1(int x)这样定义
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 01:26 , Processed in 0.160643 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表