C++怎么理解typedef int (*(*(fp()))) (int);
typedef int (*(*(fp()))) (int);可以化简为:typedef int(**fp()) (int)。
看int(**fp()) (int); //fp是个函数,它返回个这样的玩意: int(**)(int) ,这是个指针,假设这个指针叫A,A又指向一个函数的指针B,B指向一个函数,该函数有一个int参数,返回一个int。
发展历程
世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。
研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。
1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。
20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。
以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。
自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。
第一次修订是在1985年,第二次修订是在1990年,而第三次修订发生在c++的标准化过程中。在20世纪90年代早期,人们开始为C++建立一个标准,并成立了一个ANSI和ISO(International Standards Organization)国际标准化组织的联合标准化委员会。
该委员会在1994年1月25曰提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。
以上内容参考:百度百科-C++
typedef int (*(*(fp()))) (int);
可以化简为
typedef int(**fp()) (int);
看int(**fp()) (int); //fp是个函数,它返回个这样的玩意: int(**)(int) ,这是个指针,假设这个指针叫A,A又指向一个函数的指针B,B指向一个函数,该函数有一个int参数,返回一个int
fp就是返回一个A类型指针的函数
那么前面加个typedef则fp就被定义成一种类型了:fp就是一种能返回A类型指针的函数,A类型就是 int(**)(int)
给你个具体例子:
#include <iostream>
using namespace std;
int f(int a) { return 2*a;} //定义一个int(int)函数
typedef int(*(*(pf()))) (int);
pf k; //用上面的typedef类型声明函数k
int main()
{
cout<<(**k())(1234); //k返回一个函数的**, 则*k就是个函数的* ,**k就是个函数了
return 0;
}
int(**k())(int) //定义函数k
{
int(*pfi)(int) = f; //定义一个指针pfi,指向函数f
int(**ppf)(int)=&pfi; //定义一个指针ppf 指向pfi
return ppf; //返回这个指针
}
结果输出2468