函数的返回值是函数指针的指针函数

原创 2015年07月07日 17:57:53
//
// 
main.m
//  Demo
//
//  Created by lanou3g on 15/6/30.
//  Copyright (c) 2015年 zhengyl. All rightsreserved.
//

#import

//第一步, 列举出需要返回的函数
//和
int sum(int a, int b);
int sum(int a, int b){
    return a +b;
}
//差
int sub(int a, int b);
int sub(int a, int b){
    return a -b;
}
//最大公约数
int maxGY(int a, int b);
int maxGY(int a, int b){
   //这里采取普通方法求最大公约数
    int maxGY =0;
    for (int i =1; (i <= a) && (i <= b); i++) {
       if (a % i == 0 && b % i == 0) {
           maxGY = i;
       }
    }
    returnmaxGY;
}

//第二步, 根据上面的函数类型, 定义出函数指针类型
typedef int(*PFUN)(int a, int b);

//第三步, 为了完成和用户的交互, 定义结构体, 实现字符串和函数指针的对应关系
typedef struct functionName{
    charstr[20];
    PFUNp;
}FunctionName;

//第四步, 定义结构体数组, 建立对应链表
FunctionName fns[] = {
    {"sum",sum},
    {"sub",sub},
    {"maxGY",maxGY}
};
//获取结构体数组元素个数
int count = sizeof(fns) / sizeof(fns[0]);

//第五步, 完成调用函数(返回值是函数指针)
PFUN getFunction(FunctionName fns[], int count, charstr[20]);
PFUN getFunction(FunctionName fns[], int count, charstr[20]){
   //for循环遍历结构体数组, 查找出用户输入的字符串, 对应哪个函数
    for (int i =0; i < count; i++) {
       if (strcmp(str, fns[i].str) == 0) {
           return fns[i].p;
       }
    }
    
   printf("暂时没有该功能, 默认求和!\n");
    returnsum;
}







int main(int argc, const char * argv[]) {

   //函数的返回值是函数指针
    
    //分析:
    //函数:能够完成特定功能的代码块
    //返回值:函数的返回值也叫做函数的值, 可以供外部接收和使用
    //指针:指针就是地址, 确切的说是指向某种变量类型的首地址
    //函数指针:指向函数首地址, 实际上可以当函数使用
    //函数指针类型:由返回值类型, 参数类型决定
    //那么,函数的返回值是函数指针: 这句话的意思就是, 一个函数可以根据不同情况, 返回指向不同函数首地址的指针; 也就是说,可以根据不同的参数, 返回不同的函数.
    
    
    //做题
    
    //第六步,根据用户输入的字符串, 返回不同的函数指针
    char str[20]= "";
   printf("请输入要使用的功能:");
    scanf("%s",str);
    PFUN p =getFunction(fns, count, str);
    int a = p(4,5);
    printf("a =%d", a);
      
    return0;
}

关于函数返回值为指针类型的分析

先看一个例子,这是初学者经常遇到的问题 char *GetString(void) {  char p[] = "hello world";  return p; //编译器一般将提出警告...
  • zxccaoya
  • zxccaoya
  • 2016年12月05日 18:58
  • 5297

函数指针,指针函数,返回值为指针的函数

在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向函...
  • wangxufa
  • wangxufa
  • 2017年06月08日 21:23
  • 619

c++函数指针和返回值为指针的函数

1  指针的指针,数组指针 ,指针数组 2  函数指针 指针函数  3  const T   Tconst     T  f ()const      const  T f()...
  • qq_21034239
  • qq_21034239
  • 2017年04月13日 21:34
  • 499

当函数中返回值为值,指针,引用时,是如何带出和接收的?

首先我们需要知道的是,当返回一个值,指针,引用时(小于八个字节均可以由寄存器带出)需要注意的是,由于举例,下面的例子中返回了局部变量的地址,而这是有风险的,不能返回临时的局部的地址或引用。仅供思路分析...
  • qq_25123049
  • qq_25123049
  • 2016年06月02日 08:06
  • 2362

c/c++使用指针做函数返回值和指针作函数参数问题

一、使用指针做函数返回值:   1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指...
  • zhangjikuan
  • zhangjikuan
  • 2016年07月07日 09:32
  • 2016

【C语言】返回指针的函数与指向函数的指针

 一、返回指针的函数  指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。 返回指针的函数的一般形式为:类型名 * 函数名(参数列表)  比如下面这个函数,返回一个...
  • u012252959
  • u012252959
  • 2016年12月13日 09:36
  • 2669

结构体、结构体体指针作为函数返回值

函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变...
  • dfq12345
  • dfq12345
  • 2017年06月29日 18:48
  • 2472

C语言函数返回值为指针和函数返回值为void

有时遇到函数返回值为空和函数返回值为指针的情况下,需要在前面定义该函数//函数的返回值为指针也必须在此定义, //函数的返回值为void必须在此定义,返回值是整形或者其他基本类型不需要在此定义 ...
  • JiangzhouHe
  • JiangzhouHe
  • 2016年11月29日 17:34
  • 1220

C++学习记录之函数返回值为指针的问题

一般在函数中定义一个对象有两种方法: 1、在栈上建立局部变量。注意,在栈上时!栈用于函数是为了返回时找得到调用点(在调用时压入栈的) ,那么,返回时要POP才能得到。函数体中建立的任何东西都释放掉了,...
  • xiaowenliuwen
  • xiaowenliuwen
  • 2015年11月18日 19:59
  • 1574

[C/C++]如何解读返回函数指针的函数声明

int (*(*pf())())() { return nullptr; }   从来没有见过这样的函数声明。那么它究竟是一个怎样的函数呢?我努力回忆起《C专家编程》一书的内...
  • u012861978
  • u012861978
  • 2015年09月12日 09:43
  • 1028
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数的返回值是函数指针的指针函数
举报原因:
原因补充:

(最多只允许输入30个字)