zoukankan      html  css  js  c++  java
  • C++ 函数指针

    1 、函数指针的定义

    int (*fp)(int a);//定义了一个指向函数的指针

    int *fp(int a);//错误,这是一个返回整形指针的函数了,而不是函数指针。

    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    	//////////////////////////////////////////////////////////////////////////Example1
    	cout << FuncTestMethod <<endl; //输出函数地址
      	int (*fPtr)(int i);//定义函数指针
    	fPtr = FuncTestMethod;//;//将函数FuncTestMethod的地址赋给函数指针fPtr
    	cout << fPtr(5) << " | " << (*fPtr)(15) <<endl;
    	//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! 
    
    	//////////////////////////////////////////////////////////////////////////Example2
    	cout << FuncTestMethod <<endl; //输出函数地址
    	typedef	int (*fPtr)(int i);//定义函数指针类型,类型名为fPtr。typedef定义可以简化函数指针的定义 
    	fPtr f;//这里利用自己定义的类型名fPtr定义了一个f的函数指针! 
    	f = FuncTestMethod;//;//将函数FuncTestMethod的地址赋给函数指针fPtr
    	cout << fPtr(5) << " | " << (*fPtr)(15) <<endl;
    	//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! 
    	return 0;
    }
    int FuncTestMethod(int i)
    {
    	return i;
    }
    

      

    2、函数指针所指向的函数,必须为全局函数或类的静态函数

    class FuncPtr
    {
    
    	typedef int (*func)(void);
    public:
    	void FuncPtrTet(func func1)
    	{
    		(*func1)();
    	};
    	static int display(void)
    	{
    		cout <<"display"<<endl;
    		return 0;
    	}
    };
    

      

    int display2(void)
    {
    	cout <<"display2"<<endl;
    	return 2;
    }
    

      实现

    int _tmain(int argc, _TCHAR* argv[])
    {
    	FuncPtr f;
    	f.FuncPtrTet(FuncPtr::display);
    	f.FuncPtrTet(display2);
    
    	return 0;
    }
    

      

  • 相关阅读:
    javascript的propertyIsEnumerable()方法
    delete删除属性
    浅入javascript正则表达式的规则.
    关于jQuery的$.proxy()应用.
    jQuery的删除的三种方法remove(),detach(),empty()
    我来提出一个问题,大家一起讨论讨论.
    如何采集淘宝最新价格
    C中的正则函数sscanf
    HTTP协议头部与Keep-Alive模式详解
    如何实现HTTPSERVER
  • 原文地址:https://www.cnblogs.com/linlf03/p/2252525.html
Copyright © 2011-2022 走看看