C之typedef应用

1.0关于typedef关键字的基础:

  https://www.cnblogs.com/anSn/p/8783347.html

1.1 typedef 修饰“函数类型” 的调用方法:

1)我们写一段普通的函数调用:

#include<stdio.h>
int add(int a,int b);

void main()
{
    int d=0;
    d=add(1,2);
    printf("d=%d\n",d);
}
int add(int a,int b)
{
    return a+b;
}
View Code

  运行结果如下:

  

 

2)我们引入typedef去修饰“函数函数类型”,并调用起来:

#include<stdio.h>
typedef int fun(int,int);

fun  add;//等价 int add(int a,int b);
void main()
{
    int d=0;
    d=add(1,2);
    printf("d=%d\n",d);
}
int add(int a,int b)
{
    return a+b;
}
View Code

运行结果如下:

  

1.2  typedef修饰“函数指针类型”的调用方法:

1)首先,不引入typedef,写一段函数指针的定义,并指向一个函数调用起来:

#include<stdio.h>

int add(int a,int b);

int main()
{
    int d=0;
    int (*p)(int,int);//定义一个函数指针。

    p=add;//指针P指向一个函数地址    也可以p=&add; 结果一致的
    d=p(1,2);//用指针调起函数

    printf("d=%d\n",d);
    return 0;
}
int add(int a,int b)
{

    return a+b;
}
View Code

运行结果如下:

 2)引入typedef修饰“函数类型”,并结合指针构成函数指针后去调用函数:

#include<stdio.h>
typedef int fun(int,int);//给一个函数类型取一个别名,别名为fun

int add(int a,int b);

int main()
{
    int d=0;
    fun *p;//int (*p)(int,int);//定义一个函数指针。

    p=add;//指针P指向一个函数地址
    d=p(1,2);//用指针调起函数

    printf("d=%d\n",d);
    return 0;
}
int add(int a,int b)
{

    return a+b;
}
View Code

 运行结果如下:

3)typedef直接修饰“函数指针类型”,指向一个函数并调用起来:

#include<stdio.h>
typedef int (*fun)(int,int);//给一个“函数指针类型”取一个别名,别名为fun

int add(int a,int b);

int main()
{
    int d=0;
    fun p;//int (*p)(int,int);//定义一个函数指针。

    p=add;//指针P指向一个函数地址 也可以p=&add; 结果是一致的
    d=p(1,2);//用指针调起函数 此为显示调用, 隐示调用为d=(*p)(1,2);两者结果是一致的。

    printf("d=%d\n",d);
    return 0;
}
int add(int a,int b)
{

    return a+b;
}
View Code

 4)拓展:

 把一串代表函数入口地址的整形数 强转 成 “函数指针类型”,并送实参进行调用:

#include<stdio.h>
int add(int a,int b);

void main()
{
    int d=0;
    
    printf("add函数的入口地址为:%p\n",add); //add   0x00401005  

   
    d=((int (*)(int,int))0x00401005)(1,9);//函数调用。等价d=add(1,9);
    //0x00401005  是一个整型地址,先把它强转成函数指针类型 :int (*)(int,int),再送参数进行调用

    printf("d=%d\n",d);
}
int add(int a,int b)
{
    printf("add被执行了");
    return a+b;
}
View Code

运行结果如下:

 

posted @ 2019-10-16 09:32  千浦千钰  阅读(187)  评论(0编辑  收藏  举报