• 函数名和函数指针


     调用时:(*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。

     1 void MyFun(int x);//此处的申明也可以写成:void MyFun(int);
     2 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。
     3 
     4 int _tmain(int argc, _TCHAR* argv[])
     5 {
     6     MyFun(10);//这是直接调用MyFun函数
     7     FunP = MyFun;//将MyFun函数的地址赋给FunP变量
     8     (*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。
     9 
    10     system("pause");
    11     return 0;
    12 }
    13 void MyFun(int x)//这里定义一个MyFun函数
    14 {
    15     printf("%d
    ",x);
    16 }
    View Code


    或者如下编译:  FunP(20);//这是通过函数指针变量来调用MyFun 函数的。

     1 #include "stdafx.h"
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 
     5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int);
     6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。
     7 
     8 int _tmain(int argc, _TCHAR* argv[])
     9 {
    10     MyFun(10);//这是直接调用MyFun函数
    11     FunP = MyFun;//将MyFun函数的地址赋给FunP变量
    12     FunP(20);//这是通过函数指针变量FunP来调用MyFun函数的。
    13 
    14     system("pause");
    15     return 0;
    16 }
    17 void MyFun(int x)//这里定义一个MyFun函数
    18 {
    19     printf("%d
    ",x);
    20 }
    View Code

    或者:

    FunP=&MyFun;//将MyFun 函数的地址赋给FunP 变量
    FunP(20);//这是通过函数指针变量来调用MyFun 函数的。

     1 #include "stdafx.h"
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 
     5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int);
     6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。
     7 
     8 int _tmain(int argc, _TCHAR* argv[])
     9 {
    10     MyFun(10);//这是直接调用MyFun函数
    11     FunP = &MyFun;//将MyFun函数的地址赋给FunP变量
    12     FunP(20);//这是通过函数指针变量FunP来调用MyFun函数的。
    13 
    14     system("pause");
    15     return 0;
    16 }
    17 void MyFun(int x)//这里定义一个MyFun函数
    18 {
    19     printf("%d
    ",x);
    20 }
    View Code

    FunP = &MyFun;//将MyFun函数的地址赋给FunP变量
     (*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。

     1 #include "stdafx.h"
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 
     5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int);
     6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。
     7 
     8 int _tmain(int argc, _TCHAR* argv[])
     9 {
    10     MyFun(10);//这是直接调用MyFun函数
    11     FunP = &MyFun;//将MyFun函数的地址赋给FunP变量
    12     (*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。
    13 
    14     system("pause");
    15     return 0;
    16 }
    17 void MyFun(int x)//这里定义一个MyFun函数
    18 {
    19     printf("%d
    ",x);
    20 }
    View Code

    结论:
    1. 其实,MyFun 的函数名与FunP 函数指针都是一样的,即都是函数指针。MyFun 函数名是一个
    函数指针常量,而FunP 是一个函数数指针变量,这是它们的关系。
    2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以
    C 语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数
    形式一样,不是吗?)。
    3. 为统一起见,FunP 函数指针变量也可以FunP(10)的形式来调用。
    4. 赋值时,即可FunP=&MyFun 形式,也可FunP=MyFun。

    补充说明一点:在函数的申明处:
    void MyFun(int );//不能写成void (*MyFun)(int )。
    void (*FunP)(int );//不能写成void FunP(int )。

  • 相关阅读:
    Lazarus教程 中文版后续给出
    QBASIC教程
    Object Pascal中文手册 经典教程
    Pascal 基础教程
    Delphi中的关键字与保留字
    Pascal数据结构与算法
    Pascal小游戏 贪吃蛇
    Pascal小游戏 俄罗斯方块怀旧版
    Pascal ASCII和文本的转换
    IDEA安装问题解决
  • 原文地址:https://www.cnblogs.com/chensup/p/5809951.html
Copyright © 2020-2023  润新知