编程语言学习(七) 三种编程语言的函数

7 篇文章 0 订阅
6 篇文章 0 订阅

函数方面内容较少,主要关注:

一、函数定义

1.函数名前缀:

2.带默认参数与函数重载

二、函数调用与返回与内联函数

三、参数传递:

1.值传递与引用传递

2.类型转换

四、函数原型

 

(一)C语言的函数

一、函数定义:

最基础的函数定义:

 返回类型 函数名(参数表){

函数体    

}

1.函数名前缀:没有前缀

2.函数重载与带默认参数:   C语言不支持函数重载,也不支持默认参数值

二、函数调用与返回与内联函数:

1.最基本的函数调用与返回: 函数名(实参);/return 返回

2.C语言其实也是有内联函数机制的,也是通过inline关键字实现,不过单纯inline关键字作为函数定义的前缀仍然报错,而应该改成static inline 返回类型 函数名(参数名){函数体},static表示本函数只在当前文件当中使用,不受多文件结构的影响。

三、参数传递:

1.值传递与引用传递:

C语言只支持值传递

2.类型转换

函数的调用过程若发生类型不匹配,会发生类型转换,传入的是小宽度会自动类型转换成大宽度,进行自动类型转换。反之则进行强制类型转换,二者都是自动完成的,后者不太可控,建议不要尝试。

 

四、函数原型声明:

若函数的调用在定义前则应该引入函数原型。放在函数调用之前,方便其对函数调用时的实参以及后面的函数定义进行检查,函数声明和定义不一致的时候会有意外数值传入,建议不要尝试

原型声明里不需要参数名,但是还是建议写上。

C语言当中函数原型声明当中不写形参代表函数参数未知,此时若发生调用的实参类型和定义的形参类型不一样也可能报错,建议不要尝试,没有形参的时候请写void;

 

 

 

(二)C++语言的函数

一、函数定义:

与C语言语法一样的函数定义与调用

1.函数名前缀:

关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用

(virtual class::等前缀等待日后增补.....)

 

2. 带默认参数值与函数重载:

C++同时支持二者

(1) 带默认参数值:形参要求带默认值的在右边,不带的在左边,实参初始化形参是从左到右赋值的。

(2) 函数重载:

是一种属于C++静态多态性(编译时多态性)的机制,允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载,方便记忆和使用。

编译器区分重载函数是靠参数表(具体来说是参数的个数和类型不同),返回值类型不能用来区分函数重载。

(3) 可变长度的形参:见C++11新内容章节

二、函数调用与返回与内联函数

1.函数调用与返回的语法与C语言完全相同。

2.函数的优势在于实现代码重用,劣势在于降低程序的执行效率。内联函数通过在编译时将函数体嵌入每一个调用处解决了这个矛盾。但是内联函数里不能有复杂语句,比如循环语句和switch语句,也不能有异常接口的声明。

即使在原型声明当中声明了内联函数,但是由于内联函数的本质是代码嵌入,所以仍然要求函数体定义在第一次调用之前,单独的原型声明是没用的。

三、参数传递:

1.值传递与引用传递:支持引用传递,达到参数双向传递,带出多个计算结果的功效:

关于引用的内容在指针章节当中介绍。

2.类型转换:仅支持小宽度向大宽度的自动类型转换,大宽度转小宽度会报错

四、函数原型声明:

同样inline关键字在这里出现是没用的。

默认参数值只能在原型声明和定义当中一处给出,不能都给。

 

 

 

(三) Java语言的函数

一、函数定义

1.函数名前缀: 函数都定义在类内,我们以public static修饰,剩余部分与C语言相同,对于public static有待未来在作用域与生存期章节讲述。

2.带默认参数与函数重载:Java语言认为带默认参数的函数可以依靠函数重载实现,所以不再提供带默认参数的功能。

二、函数调用与返回与内联函数

1.函数调用与返回与C/C++也一样

2.java当中也有内联函数的概念,是在定义函数时加上final关键字实现的,但是由于C++当中已经出现了inline函数不当内联,不带inline关键字却内联的情况,java当中已经不推荐使用内联函数的机制了。

三、参数传递:

1.值传递与引用传递:java中函数只能进行值传递

2.类型转换:与C++相同,只能进行自动类型转换,大宽度不能转小宽度。

四、函数原型

Java是基于类的,所有函数都在类里面,没有也不需要原型声明。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值