C++_10_指针函数和函数指针 - 重写版

发布时间 2023-11-05 23:16:41作者: 尘落曦枫

指针函数和函数指针

  指针函数
      类型标识符    *函数名(参数表)       eg:int *f(x,y);
     指针函数——1、首先他是一个“函数”,只不过一定有返回值,并且返回值为地址,需要用指针来接
           2、由于返回值是地址,所以类型说明符一般都是int
           3、函数名没有被括号束缚,这表示函数具有一定的独立性并且他首先必须满足函数的属性

 

  函数指针
      类型标识符    (*函数名)(参数表)
     函数指针——1、首先他是一个“指针”,这里的函数名实际上应该是指针变量名,只不过为了便于区分指针函数,先这样写
           2、指针的定义类型和指向函数的类型保持一致
  ·           3、函数名(指针变量名)被括号将其和*束缚在一起,突出这首先是一个指针

/**
*    指针函数
*    类型标识符* 函数名(参数表)       eg:int* f(x, y);
*    指针函数——1、首先他是一个“函数”,只不过一定有返回值,并且返回值为地址,需要用指针来接
*                2、由于返回值是地址,所以类型说明符一般都是int
*                3、函数名没有被括号束缚,这表示函数具有一定的独立性并且他首先必须满足函数的属性
*
*    函数指针
*    类型标识符    ( * 函数名)(参数表)  int(* f)(x, y);
*    函数指针——1、首先他是一个“指针”,这里的函数名实际上应该是指针变量名,只不过为了便于区分指针函数,先这样写
*                2、指针的定义类型和指向函数的类型保持一致
*                3、函数名(指针变量名)被括号将其和 * 束缚在一起,突出这首先是一个指针
*/


#include<iostream>
using namespace std;

char * zzhs();           //指针函数定义

char(*pr)();            //函数指针定义
char Ordinary_fun();    //定义一个普通的函数


int main()
{
    //-----指针函数-----------------------------------------------
    char* pn = zzhs();                  //指针函数调用
    cout << "pn = " << pn << endl;      //zhizhenhanshu
    cout << "*pn = " << *pn << endl;    //*pn = z

    //-----函数指针-----------------------------------------------
    cout << "Ordinary_fun =" << Ordinary_fun << endl;   
    //Ordinary_fun =00007FF6DEF21550    Ordinary_fun就是函数的调用入口地址
    pr = Ordinary_fun;  //pr就是函数指针,被赋值为一个普通函数的入口地址       
    (*pr)();            //函数指针调用    (*Pr)- 解引用出函数名,相当于写出  zzhs()

    return 0;
}


char * zzhs()
{
    static char *p = (char*)malloc(sizeof(int));
    static char b[20] = "zhizhenhanshu";
    p = b;
    cout << "b = " << b << endl;    //b = zhizhenhanshu
    cout << "&b = " << &b << endl;  //&b = 00007FF69FFB6018
    cout << "p = " << p << endl;    //p = zhizhenhanshu
    cout << "&p = " << &p << endl;  //&p = 00007FF69FFB61A8
    return p;
}

char Ordinary_fun()     //普通的函数
{
    char c[20] = "hanshuzhizhen";
    cout << "c = " << c << endl;    //c = hanshuzhizhen
    return 0;
}