• 函数指针与返回指针的函数


    如下两个例子

     1. int* lpfun(int,int);

     2. int (*lpfun)(int,int);

    第一种是我们熟悉的函数指针,即函数的返回值为int类型的指针

    第二种一定要用括号把*号和lpfun括起来,这种类型与第一种不一样,是指向一种函数地址的指针。这个函数的返回类型是int型,实参也为int型。

    #include <stdio.h>

    using namespace std;

    int* lpfun1(int,int); //声明一个返回指针为int类型的函数
    int lpfun2(int,int);  //普通函数
    typedef
    int (*lpfunPointer)(int,int); //声明一个函数指针类型,用于保存它要指向的函数地址
    void main()
    {
    int *result=lpfun1(10,20);
    printf(
    "%d\n",*result);
    delete result;  //删除堆中的指针
    result
    =0;     //使指针无效

    lpfunPointer p
    =lpfun2; //保存lpfun2函数的地址,函数名也是一种指针
    printf(
    "%d\n",p(12,60)); //调用带参的函数

    }
    /***********************************************************************************************
    lpfun1过程说明:
        如果我们在此函数中这样写: int *p=NULL;
    *p=x+y;
    return p;
    这样的写法是错误的,因为在函数中声明的变量在函数执行完后就不存了,即此是p不存了,是个无效指针,就不能得到这个返回值。
     而如果在堆中开辟一小内存来存放,并在完成后由手工来释放,则我们可以用int* p=new int;来创建,这样即使函数没了,但
    这个p还是存在于堆中的,由此我们会看到在main()中用了一个int *result=lpfun1(10,20)把堆中的p指针指向result指针,再
    手工释放。 这样就不会内存泄露了。

    谨记:永远不要从函数中返回局部自动变量的地址。
    ******************************************/
    int* lpfun1(int x,int y)
    {
    int *p=new int(0);
    *p=x+y;
    return p;
    }

    int lpfun2(int x,int y)
    {
    return x+y;
    }

  • 相关阅读:
    图解 perspective && perspective-origin && transform3d && transform-origin
    【CSS3练习】3D盒子制作
    【CSS3练习】在圆上旋转的菜单
    【CSS3练习】transform 2d变形实例练习
    -webkit-overflow-scrolling : touch 快速滚动 回弹 效果
    【canvas】blackboard 黑板
    【canvas】高级功能一 变形
    【canvas】基础练习三 图片
    【canvas】基础练习二 文字
    【canvas】基础练习一 图形
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/2154577.html
Copyright © 2020-2023  润新知