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

    此文主要针对编译器对函数名的隐式转换举例说明。

    #include <stdio.h>
    #include <stdlib.h>
    
    void func(int a)
    {
        printf("xxxxxa=%d
    ", a);
    }
    
    int main (int argc, char **argv)
    {
        void (* f1)(int )=func;
        printf("f1=%p
    ", f1);//f1=0x804857d
        void (* f2)(int a)=&func;//f2=0x804857d
        printf("f2=%p
    ", f2);
      //初始化表达式中&操作符是可选的,因为函数名被使用时总是由编译器将其转换为函数指针
      //&操作符只是显示地说明了编译器将隐式执行的任务
    func(
    10);//简单使用名字调用函数func,函数名func首先被转换为一个函数指针,该指针指定函数在内存中的位置,然后,函数调用操作符调用该函数,执行开始于这个地址的代码。 f1(1);//函数指针通常用法 (*f2)(2);//对f2执行间接访问操作,他把函数指针转换为一个函数名,但这个转换并不是真正需要的,因为编译器在执行函数调用操作符之前又会把它转换回去 //以上三条语句的指定效果是一样的. return 0; }

    综上所述:

    函数指针初始化时,是否带&操作符,效果一样。

    函数指针使用时,是否使用间接访问操作(*),效果一样。

  • 相关阅读:
    启用数据库 aspnetstate 会话状态
    窗体设计器
    玩转hyper-v
    PDF,IMAGE,HTML,WORD,EXCEL 互操作
    在线浏览office 文件
    使用c#操作txt
    C#里调用 MysqlDB
    c#控件攻略宝典之ListBox控件
    c# word文档与二进制数据的相互转换
    C#对话框的使用
  • 原文地址:https://www.cnblogs.com/black-mamba/p/6765231.html
Copyright © 2011-2022 走看看