鱼C论坛

 找回密码
 立即注册
查看: 12764|回复: 40

[知识点备忘] S1E30:指针函数和函数指针

[复制链接]
发表于 2016-10-21 03:38:15 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-7 12:08:32 | 显示全部楼层
这一块听的有点蒙圈了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-1-7 12:09:21 | 显示全部楼层
得好好捋一捋
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-18 10:38:20 | 显示全部楼层
假 鱼 老师



5-+   结果   5- 134513251

5+- 结果    5+ 134513251

请问   134513251  是怎么出来的  




11.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-18 02:18:30 From FishC Mobile | 显示全部楼层
本帖最后由 zzxwbs 于 2017-2-18 02:37 编辑
Sboy 发表于 2017-1-18 10:38
假 鱼 老师  




scanf第三个格式输入不正确,理论上来说第三个无法输入,有的编译器按照0来处理,有的编译器给一个固定的数字处理,还有int最大支持65535,再大就过界了也不能正常运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-8-1 12:27:00 | 显示全部楼层
这节有难度,硬骨头啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-12-13 15:54:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-14 21:11:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-7 12:18:12 | 显示全部楼层
#include <stdio.h>

int a,b,c;

void main()

{
        int max(int,int);
        int min(int,int);
        int sum(int,int);

        void process(int x,int y,int(*fun)());

       
        printf("plsase input a&b:");
        scanf("%d%d",&a,&b);

        printf("max=");
        process(a,b,max);

        printf("min=");
        process(a,b,min);

        printf("sum=");
        process(a,b,sum);
}
void process(int x,int y,int(*fun)())
{
        c=max(a,b);
        printf("%d\n",c);
        c=min(a,b);
        printf("%d\n",c);
        c=sum(a,b);
        printf("%d\n",c);
}
int max(int x,int y)
{

        if(a>b)
        {
                return a;
        }
        else
        {
                return b;
        }
}

int min(int x,int y)
{
        if(a<b)
        {
                return a;
        }
        else
        {
                return b;
        }
}

int sum(int x,int y)
{
        int add;
        add=a+b;
        return add;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 12:18:53 | 显示全部楼层
高手们帮我看看上面程序,哪里错了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 20:39:26 | 显示全部楼层
你说错了吧为什么不可以返回局部变量的指针 ,明明可以返回,我只知道不可以返回局部变量的引用
#include<stdio.h>//二维数组名做参数
void main()
{
        double *search (double a[][4],int n);double *re;
        double score[3][4]={{33,45,67,78},{8,5,67,89},{97,95,44,99}};
        int i,j;
        for(i=0;i<3;i++)
                for(j=0;j<4;j++)
                {
                        printf("%.2lf  ",score[i][j]);
                }
                re=search (score,1);
                for(i=0;i<4;i++)
                {
                        printf("%lf\n",*(re+i));
                }
}
double *search (double a[][4],int n)
{
        double *ll;
        ll=a[n];//二维数组中一维数组代表地址,代表二维数组中每一行的地址
        return ll;
这个程序就是对的
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-2 09:42:27 | 显示全部楼层
咚咚咚咚咚咚咚···
这敲键盘的声音每节课都听的我惊心动魄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 20:51:20 | 显示全部楼层
函数指针作为参数

#include <stdio.h>

int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);//此函数有三个参量,第一个参量是函数指针,第二、第三个是整型参数

int add(int num1, int num2)
{
        return num1 + num2;
}

int sub(int num1, int num2)
{
        return num1 - num2;
}

int calc(int (*fp)(int, int), int num1, int num2)
{
        return (*fp)(num1, num2);//参数num1、num2作为函数指针 fp 所指向的函数的输入参数;
}

int main()
{
        printf("3 + 5 = %d\n", calc(add, 3, 5));//函数名add其实就是一个地址,直接作为函数指针使用
        printf("3 - 5 = %d\n", calc(sub, 3, 5));

        return 0;
}

---------------------------------------------------------------------------------------------------------------
函数指针作为返回值

int (*select(char op))(int, int);//首先这是一个函数指针,指向有两个int变量的函数,其所指向的函数地址由指针函数*select(char op) 获得

int (*select(char op))(int, int)
{
&#160; &#160;&#160; &#160;&#160;&#160;switch(op)
&#160; &#160;&#160; &#160;&#160;&#160;{
&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; case '+': return add;
&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; case '-': return sub;
&#160; &#160;&#160; &#160;&#160;&#160;}
}
int main()
{
&#160; &#160;&#160; &#160;&#160;&#160;int num1, num2;
&#160; &#160;&#160; &#160;&#160;&#160;char op;
&#160; &#160;&#160; &#160;&#160;&#160;int (*fp)(int, int);
&#160; &#160;&#160; &#160;&#160;&#160;printf("请输入一个式子(如:1+2):");
&#160; &#160;&#160; &#160;&#160;&#160;scanf("%d%c%d", &num1, &op, &num2);
&#160; &#160;&#160; &#160;&#160;&#160;fp = select(op);
&#160; &#160;&#160; &#160;&#160;&#160;printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
&#160; &#160;&#160; &#160;&#160;&#160;return 0;
}

不知道这样理解对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-15 16:09:12 | 显示全部楼层
总感觉 select 与 calc 有哪里功能是重复的,有点绕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-6-18 20:24:28 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-17 11:16:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-18 16:01:51 | 显示全部楼层
蒙圈了    我听完就忘   自己分析又分析不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 16:53:45 | 显示全部楼层
码住   再看看视频理解理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-12 16:26:26 | 显示全部楼层
魔鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 19:09:26 | 显示全部楼层
  1. #include<stdio.h>
  2. int add(int, int);
  3. int sub(int, int);
  4. int cal(int(*p)(int ,int),int, int) ;
  5. int(*p(char ))(int ,int);
  6. int add(int a,int b)
  7. {
  8.         return a + b;
  9. }
  10. int sub(int a,int b)
  11. {
  12.         return a-b;
  13. }

  14. int cal(int(*p)(int,int),int a,int b)
  15. {
  16.         return p(a,b);
  17.        
  18. }
  19. int(*p(char c))(int a ,int b)
  20. {
  21.         switch(c)
  22.         {
  23.                 case '+':return add;
  24.                 case '-':return sub;
  25.         }
  26.        
  27. }

  28. int main(void)
  29. {
  30.         printf("please input a presentation,such as (a-b)");
  31.         int a,b;
  32.         char c;
  33.         scanf("%d%c%d",&a,&c,&b);
  34.         int (*fp)(int ,int);
  35.         fp = p(c);
  36.         printf("%d %c %d = %d",a,c,b,cal(fp,a,b));
  37.         return 0;
  38. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表