| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 560 人关注过本帖
标题:有关 指向函数的指针 的一点问题
只看楼主 加入收藏
wdufo
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-9-15
收藏
 问题点数:0 回复次数:3 
有关 指向函数的指针 的一点问题
今在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的型参和返回值各不相同,还有办法放在同一个指向函数的指针的数组里么?
搜索更多相关主题的帖子: 指针 函数 typedef ops 
2006-03-23 11:46
阿甘
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-9
收藏
得分:0 
第一个问题:定义STG_TYP为int型;
第二个问题:PF是void类型的指针,可以存储多种返回类型的函数
2006-03-23 13:19
wdufo
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-9-15
收藏
得分:0 
谢谢阿甘的指点,但是仍有疑惑:
对于问题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'
是不是我哪里写错了?
2006-03-23 22:14
Bill_Gates
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-2-24
收藏
得分:0 

#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)这样定义


2006-03-24 12:02
快速回复:有关 指向函数的指针 的一点问题
数据加载中...
 
   



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

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