本文主要是介绍[初]小议typedef,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
typedef void (*ptr_fun)(int ,int);
因为刚学C++,这种typedef 函数指针的用法令我有点困惑?
我对于上面的形式的唯一问题就是,这有什么用?
先简单介绍下typedef的用法: typedef 顾名思意就是创建一个新的类型名(不是新类型!) typedef unsigned int U32; typedef 旧名字 新名字(其中旧名字必须是一个已经存在的类型名) 所以你typedef blackPig pinkPig;编译器就不知道你想干吗了. |
切入主题->typedef void (*ptr_fun)(int ,int);有什么用?(问题A) 现看下面这个小例子 //author:snail //date:070404 #include <iostream> using namespace std;
system("pause"); 编译时红色代码那里不能通过,错误原因是: BS_function_1_070404.cpp:13: error: `ptr_fun1' does not name a type 这句话的意思,在这里ptr_fun1是一个变量名,而不是一个类型名,所以无法作为fun2函数声明中形参的类型名,那现在的问题是如果我们需要以这样的形式传入函数指针,我们应该怎么办?(问题B) 问题A和问题B很有趣,一个是另一个的答案,所以两个问题联系起来不难理解 要实现这样的形式,必须借助typedef 这个工具创建某一个能够具体函数指针的新类型 即typedef void (*ptr_fun1)(char *,int &); 这里的 void 和 (*ptr_fun1)(char*,int &)不是联系在一起的,前面的void是系统已经存在的类型,后面(*ptr_fun1)(char *,int &)指ptr_fun1是一个接受两个参数而且返回类型(匿名)等于'旧类型'void的一个函数指针类型
这可以理解为一个间接命名: typedef A B; 最常用的用法 [typedef A B(C->B);] --> typedef A C; 创建函数指针类型的用法(B和C有联系,但B给匿名了,这里只创建了一个新类型名C); |
使用了typedef以后的程序! //author:snail //date:070404 #include <iostream> using namespace std;
typedef void (*ptr_fun1)(char*,int&);
ptr_fun1 = fun1//错误,这里ptr_fun1不再是一个变量名了,不能直接使用 ptr_fun1 ptr; ptr = fun1; fun2(ptr)("one more more hello!",i);//现在终于可以以这种形式调用函数指针了,这都是typedef的功劳 system("pause"); |
作者:snail
日期:07年4月4日
参考资料:<<C++程序语言设计特别版>>B.S
这篇关于[初]小议typedef的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!