`
cloudtech
  • 浏览: 4611852 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

两个函数声明的理解

 
阅读更多

1 当今计算机启动时,硬件会去调用地址为0的函数,用c语言模拟这个过程,应该如何声明这个函数?

调用某个函数,c语言中一般会利用指向函数的指针,即如下形式:

void (*f)(void);

上面的表达式的意思是, f是指向函数的指针,指向的函数的形式是: 参数是void类型的,返回值也是void类型的。这个很好理解,通常我们根据运算符的优先级来理解,首先*f是个指针,其次*f()表明这个指针指向一个函数。

另外,类型转换是经常用的一种方法,表示一个返回值是void,指向函数的指针的类型即为:

(void (*f) (void))

有了上面的知识,我们就可以写出上面提出的问题了。

如果,我们把0理解为一个指向函数的指针,则问题很容易解决了,可以这么定义:

void (*0)(void);

但是*必须要一个指针来做操作数,而且这个指针是个指向函数的指针,那么可以把0进行类型转化,编译器是允许这么做的。

(void (*)(void))0

这就表示把0强制转化为返回值是void的函数指针的形式,那么这个函数怎么调用呢?假设fp是指向函数的指针,那么*fp就是那个函数,那么

(*fp)(),就是fp指向的那个函数的调用了,但是,一般会这么写fp(),这是ANSIC规定的(*fp)()的简写的形式。

同理,*((void (*)(void))0) 就是这个函数,那么(*((void (*)(void))0))()就是这个函数的调用了

*

分享到:
评论

相关推荐

    C ++友元函数的理解

    (1) 定义一个Boat和Car两个类,他们都具有私用属性--重量; (2)编写一个函数,计算两者的重量和。

    关于c语言中回调函数的理解

    前言 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用...下面是两个函数指针的声明 int(*f)(int,float);int*(*g[])(int,float); 前者把f声明为一个函数指针,

    深入理解javascript中的立即执行函数(function(){…})()

    ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因...

    c++多态性与虚函数练习题

    1、定义一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数getA()和getB()分别取得a和b的值。定义类B为A的公有继承类,并定义同名成员函数getA(),使其返回a的2倍。主函数中...

    10.第十章 函数.txt

    例:求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)。 /*求最大公约数用辗转相除法*/ #include int main() { int i1,i2,i3,i4,gcd,lcm,temp; printf("Input i1 and i2:"); scanf("%d%d",&i1;,&i2;...

    通过实例理解javascript中没有函数重载的概念

    将函数名想象为指针,也有助于... 显然,这个例子中声明了两个同名函数,而结果则是后面的函数覆盖了前面的函数。以上代码实际上与下面的代码是一致的。 代码如下: var addSomeNum=function(num) {  return num+100

    C++课程实验三代码大全.zip

    1 、定义一个时间类Time,有三个私有成员变量Hour、...⑥删除两个类中的函数VisitGirl(Girl & ) ,VisitBoy(Boy & ),定义一个顶层函数VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元,通过调用该函数输出信息。

    02 函数与事件.ppt

    "+"可以用于两个数相加,还可以用于连接字符串 parseInt() 和 parseFloat() 函数将字符串分别转换为整型和小数 运算符号分为算术运算符、比较运算符、逻辑运算符 分支结构 条件语句分为if语句,if-else语句、if的...

    C语言下的冒泡排序,可以直接编译使用

    这个函数接收一个整数数组arr和数组的长度n为参数,并对数组进行升序排序。通过使用两个嵌套的循环结构,本程序对数组中的元素两两比较,并交换它们的位置,直到所有元素被正确排序。 在main函数中,程序声明了一个...

    指针程序设计.docx

    3 必做实验 【题目5-1】定义和实现一个函数void swap_int(int *p , int *q),该函数实现两个整数的交换。在main函数中构造两个整型变量,通过调用swap_int函数实现这两个整型变量的数值交换,并显示交换前和交换后...

    判断2个字符串是否含有相同的字符

    写纸上和写计算机里并编译成功完全是两个效果。 开始没太多字符串操作,很繁琐、难点也多,后逐渐改进。 典型问题1: sizeof()局限于栈数组 char a[] = "asd213123123"; 形式,并且这种不能用'\0'判断是否结束...

    C++使用SOCKET实现TCP-IP协议的通讯最好的DEMO源码

    首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!...

    谈谈JavaScript中的函数

    function f1(){} //函数声明,f1为函数名,可以将其理解为变量f1指向一个函数 function f2(){return 100;}//函数允许有返回值 function f3(a,b){}//函数中可以定义多个参数,无需指定变量类型 方式2 var f4=function()...

    Python 函数的简易使用(二)

    函数的初步使用(二) 作者:爱吃肉的小花生 首先声明:写这些只是方便做着自己记忆和理解,如果能帮助到大家那当然更好不过 一、函数编写指南 (1)用小写字母和...(5)若程序中含有两个以上的函数时,在一个函数

    C++ 中函数重载、覆盖与隐藏详解

    例如,声明一个两个整数之和的函数,int iAdd(int iNum1,int iNum2);而函数的定义可以理解为对函数功能的详尽而准确的解说,通俗点,就是实现函数“how to do?”的效能。两个整数之和函数的定义如下: int iAdd...

    C++中的函数重载、覆盖与隐藏

    例如,声明一个两个整数之和的函数,int iAdd(int iNum1,int iNum2);而函数的定义可以理解为对函数功能的详尽而准确的解说,通俗点,是实现函数“how to do?”的效能。两个整数之和函数的定义如下:   ...

    c++11智能指针解析——揭开底层面纱,完整理解智能指针.pdf

    //但是不能⽤拷贝构造和等号赋值把base1赋值给base2了 但是如果想切换控制权的话也不是没有办法,我们可以看到还有个这样的函数: 要理解这两个函数,⾸先要理解c++11引⼊的move和forward;⽽要理解move和forward得...

    深入理解JavaScript系列(2) 揭秘命名函数表达式

    前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点。 简单的说,命名函数表达式只有一个...

    fewpjs_arrow_function_shorthand-online-web-sp-000

    到目前为止,我们仅使用过一个函数声明: function foo ( ) { return 'bar' ; } 也可以编写一个函数: let foo = function ( ) { return 'bar' ; } 赋值运算符( = )右边的function() {...}被称为函数表达式...

    js-arrow_shorthand_lab

    到目前为止,我们仅使用过一个函数声明: function foo ( ) { return 'bar' ; } 也可以编写一个函数: let foo = function ( ) { return 'bar' ; } 赋值运算符( = )右边的function() {...}被称为函数表达式...

Global site tag (gtag.js) - Google Analytics