c语言 函数的声明,C语言中的函数声明

本文通过解析C语言中的函数声明,详细介绍了如何声明和使用函数指针,包括强制类型转换和函数调用的不同方式。同时,文章还讨论了在特定场景下,如模拟开机启动调用函数,以及Linux内核中的信号处理函数声明。通过对函数声明的深入剖析,帮助读者理解C语言中的指针和函数声明规则。
摘要由CSDN通过智能技术生成

看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解。

1.理解函数声明

为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程。调用语句如下:

(*(void (*)())0)();

胆颤了吧?首先我们从函数的声明说起:有如下一个函数

void func(){...}

那么,要想声明一个函数指针,指向这类函数,怎样声明呢?如下:

void (*pf)();

那么,想要将一个值转换成一个指针,指向这类函数,怎么强制转换呢?如下:

(void (*)())value

现在value被转换成了一个指向函数的指针,怎么调用它呢?如下:

((void) (*)()value)();

或    (*(void) (*)()value)();

或    (******(void) (*)value)();

神奇吧,看了上面的函数调用方式!其实你完全可以这样调用函数:

func();

(*func)();

(********func)();

没有任何问题!

对于初学的时候,最容易头晕的就是指针符*到底是什么东西?它是变量的一部分?还是声明类型的一部分?其实,仔细回忆C中标识符的定义规则就知道,指针符*必须是类型声明的一部分,因为变量的声明不能含有指针符号,否则是一个非法的变量!</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值