今天做到一题面试题如下, 读到第9行的时候发现和自己理解的有出入。

个人理解函数名是函数的入口地址就是一个人指针,那为什么还要取地址再赋值给p呢?

带着疑惑百度了一番,发现网上没人发现程序中的问题,所以就记录一下,希望以后做到这题的同学不再被误解。

错误

//代码为网上复制的,存在许多问题
//运行的结果提示: 程序中有游离的‘\343’等一系列错误
#include <stdio.h>   
int inc(int a)   
{ return(++a); }   
int multi(int*a,int*b,int*c)   
{   return(*c=*a**b); }  
typedef int(FUNC1)(int in);   
typedef int(FUNC2) (int*,int*,int*);  
void show(FUNC2 fun,int arg1, int*arg2)  
{    FUNC1 p=&inc;   int temp =p(arg1);   fun(&temp,&arg1, arg2);   printf("%dn",*arg2);   
}   
main()   
{   int a;          show(multi,10,&a);    return 0;
}  

于是自己手打了一遍:

#include <stdio.h>int inc(int a)
{return (++a);
}int multi(int * a, int * b, int *c)
{return (*c = *a * *b);
}typedef int(FUNC1)(int in);
typedef int(FUNC2)(int *,int *,int *);void show(FUNC2 fun,int arg1,int * arg2)
{FUNC1 p = &inc;int temp = p(arg1);fun(&temp,&arg1,arg2);printf("%d\n",*arg2);
}
int main()
{int a;show(multi,10,&a);return 0;
}
//编译结果错误为:
//test.c: 在函数 ‘show’ 中:
//test.c:26: 错误:函数 ‘p’ 像变量一样被初始化

分析:

FUNC1 p = &inc;
左: 定义一个形参为int型,返回值为int型的函数p(p为函数的入口地址)。
右: 将函数inc()的入口地址 取 地址;
左右明显是不同的数据类型。

修改

//方法一:
#include <stdio.h>int inc(int a)
{return (++a);
}int multi(int * a, int * b, int *c)
{return (*c = *a * *b);
}typedef int(*FUNC1)(int in);    //此时FUNC1变成了指向函数的指针
typedef int(FUNC2)(int *,int *,int *);void show(FUNC2 fun,int arg1,int * arg2)
{FUNC1 p = &inc;
//  FUNC1 p = inc;  这样写也是对的,不知道如何理解。
//  个人理解: 像int a[10]一样 ,  a和&a 是一个地址     int temp = p(arg1);fun(&temp,&arg1,arg2);printf("%d\n",*arg2);
}
int main()
{int a;show(multi,10,&a);return 0;
}
//方法二:
#include <stdio.h>int inc(int a)
{return (++a);
}int multi(int * a, int * b, int *c)
{return (*c = *a * *b);
}typedef int(FUNC1)(int in);
typedef int(FUNC2)(int *,int *,int *);void show(FUNC2 fun,int arg1,int * arg2)
{FUNC1 *p = &inc;     //定义一个指针p指向一个形参为int型,返回值为int型的函数 int temp = p(arg1);fun(&temp,&arg1,arg2);printf("%d\n",*arg2);
}
int main()
{int a;show(multi,10,&a);return 0;
}

问题

//为什么在typedef int(FUNC2)(int *,int *,int *);的FUNC前加*程序也是对的
//请看到这篇文章的同学,帮我一下,谢谢。
//如下:
#include <stdio.h>int inc(int a)
{return (++a);
}int multi(int * a, int * b, int *c)
{return (*c = *a * *b);
}typedef int(FUNC1)(int in);
typedef int(*FUNC2)(int *,int *,int *);void show(FUNC2 fun,int arg1,int * arg2)
{FUNC1 *p = &inc;     //定义一个指针p指向一个形参为int型,返回值为int型的函数 int temp = p(arg1);fun(&temp,&arg1,arg2);printf("%d\n",*arg2);
}
int main()
{int a;show(multi,10,&a);return 0;
}

#include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); }相关推荐

  1. Java中int型如何求幂_关于java:为什么Math.pow(int,int)慢于我的幼稚实现?

    昨天我看到一个问题,问为什么Math.pow(int,int)这么慢,但是问题措辞不佳,没有进行任何研究,因此很快就关闭了. 我做了一些自我测试,发现与整数参数相比,Math.pow方法实际上比我自己 ...

  2. php 类中调用另类,PHP return语句另类用法不止是在函数中,return语句_PHP教程

    PHP return语句另类用法不止是在函数中,return语句 分享下PHP return语句的另一个作用,在bbPress的代码中看到的一个奇葩使用方法. 一直以为,return只能出现在函数中, ...

  3. js获取int类型长度_js代码比较大小前需要把string转换int

    今天在写代码时发现一个容易忽略的问题,写下来以供参考 这是做的一个验证,设置的最小值minValue不能小于参数本身的最小值min 当输入正数的时候都没有问题,但是输入负数时就出现问题了 正确设置参数 ...

  4. c语言 int a 5,在C语言中,有如下的写法:int a = 5; int *pa; pa = (a + 1);

    pa = &(a+1)这一句不对. a是一个变量,a+1是一个数值,无法再通过在前面加"&"获得一个地址.有的编译器可以用&(int )(a+1)的方式强制 ...

  5. python 小于等于号不支持int string_为什么这个Python String的大小会在失败的int转换中发生变化...

    在Python 3.6中将字符串转换为int的代码请求使用字符串的UTF-8形式: buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen); 并 ...

  6. byte数组转int数组 java_如何把一个byte数组的数字转换成int

    这里简单记录下两种转换方式: 第一种: 1.int与byte[]之间的转换(类似的byte short,long型) [java] view plain copy /** * 将int数值转换为占四个 ...

  7. C++ int/char转string/char数组格式化给char数组赋值(int,char,double)

    int和char字符串格式化转换成string的代码如下: char *temp=new char[10];sprintf(temp,"(%s %d)",lei,num);//格式 ...

  8. mysql int 做排序_Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案...

    自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的.因为我只允许输出数字.这本来也没什么,无非就是占点空间,懒得改了.但是今天在后台发现排序有问题.于是,没办法,改 ...

  9. int** 赋值_一篇文章搞明白Integer、new Integer() 和 int 的概念与区别

    基本概念的区分 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Integer 实际是对象的 ...

  10. python中int函数是什么作用_【后端开发】python中int函数怎么用

    int() 函数用于将一个字符串会数字转换为整型.接下来通过本文给大家介绍python 中的int()函数的相关知识,感兴趣的朋友一起看看吧 int(x, [base]) 功能: 函数的作用是将一个数 ...

最新文章

  1. 中文NLP的分词真有必要吗?李纪为团队四项任务评测一探究竟 | ACL 2019
  2. 网站Web服务器测试及优化参考
  3. windowsDOS命令
  4. Matalab类定义
  5. Css Secret 案例Demo全套
  6. mysql不区分大小写设置_mysql设置不区分大小写
  7. 【Python】Matplotlib绘图中文乱码问题的解决方案
  8. extjs 中登录保存用户名
  9. ubuntu未发现wifi适配器_Windows 10 9月更新频翻车,1903版本网络适配器又出bug
  10. spring中for循环中事务
  11. XenApp/XenDesktop 7.12新功能LHC解读
  12. 【形状检测】基于matlab Hough变换形状检测【含Matlab源码 468期】
  13. Android轮播图代码
  14. cmd xcopy 拷贝文件夹_如何使用Xcopy复制文件夹及其子文件夹?
  15. Python编程通过出生日期判断星座
  16. 社会软件力量:六度分隔理论
  17. ESX修复Linux虚拟机重启只读模式
  18. Layui的基本使用(前端登录操作步骤)
  19. STOP 0X00000018关机蓝屏重启问题
  20. matlab编写扫雷,【matlab编程】Matlab版扫雷

热门文章

  1. 计算机在物理学中应用论文3000字,大学物理论文3000字
  2. java和基岩版凋零打法,六种凋零打法介绍 凋零还可以这么打
  3. 教你科学实施有氧运动
  4. 结构方程模型(SEM)及其R实现
  5. csdn博客名字修改
  6. 部分iphone机型无法实现css的animation动画效果(无效, 失效)
  7. 在Linux系统(CentOS 8.2)腾讯云服务器下部署原神云崽机器人(Yunzai-Bot)【保姆入门级】
  8. 通信行业基础知识大全
  9. KKT条件(Karush-Kuhn-Tucker)及二阶充分条件(The second-order sufficiency condition)
  10. centos7 xfs分区重调整