关于函数调用其实是函数指针+传参+解引用的一些思考

直接访问和间接访问的理解。

直接访问:既然函数是数据处理器,也就是对全局变量进行读写操作,这种读写操作是直接的,所以我叫做直接访问。

间接访问:函数要想有意义就要有三要素:函数声明、函数调用、函数定义。其中最重要的就是函数调用和函数定义。函数调用也就是给函数指针传参后解引用的过程。这里充分理解函数名、函数指针、函数地址的深层含义。要么说指针才是C语言的灵魂。函数调用的过程其实是一个“跳转”的过程。函数名就是要跳转的代码段地址。传参的其实就对应变量中的值,也就是数据。这些数据会被复制copy到函数的形参中去存储,函数内部其实就是根据参数中的值进行判断、加工的过程。

如何理解函数返回值?

首先返回值是一个数据,这数据要么存储在函数内部某个栈变量上,没有作为常数直接返回,关于返回其实也是一个往回“跳转”的过程,与函数调用的跳转组成了一个循环。这个数据可以作为函数内部代码运行过程记录,也可以作为对参数进行加工后的结果,总之是一个确定的值。这个值被跳转返回给函数调用的发起者也就是上一层函数。有时候根据这个值进行逻辑判断,有时候传递给上一层函数的某个栈变量。

如何理解没有参数的函数调用和函数定义?

从指针角度出发,这种函数调用的过程是:函数指针+解引用。也就是没有经过参数传参。这种函数在单片机编程中经常用作跳转直接访问全局变量,也有些无参函数主要完成某些动作,但是从宏观上看也是对全局变量进行直接访问(包含寄存器)。而且无参函数因为没有自变量(参数)的存在,所以每次都完成同样的工作,这也是与有自变量(参数)函数的区别(含参函数在函数调用的时候还需要传递参数值给形参列表,如果传递数值不一样,函数体内部运行代码或者计算得到的输出值就不一样)。

总之,对全局变量的读写操作可以看做是直接访问。对函数调用+传参+函数定义的过程可以看做是间接访问。因为函数如果只去看函数定义而忽略函数调用(包含传参)只是看到事物的某一方面,是不全的。

最后,再说一遍:指针才是C语言的灵魂,这句至理名言。

额外延伸:

思考一个问题,用c语言写的函数(这里指的是函数定义)和数学的函数之间有哪些共性?

我的答案是2种函数在宏观上看来都是抽象的、概括的、包含所有情况而非特定情况的。

有了C语言写的函数,通过函数调用传参,这样非特定情况就确定下来了。相对的数学的函数如果给了x特定的值,那么y值的结果也是特定的。这也是两者都称之为“函数”的原因。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值