【自用】C++学习-函数的定义&调用&声明 Day3

一、函数定义及调用

在C++中,之前以及已经学习到要想程序可以在编程软件上正常运行,必不可少的一个部分是main函数。这是因为每一个C++程序在开始执行时都会去寻找main函数作为接口,找到了main之后再一步步地执行其中的语句。

这种使用方式会导致如果我们需要实现非常复杂的功能,都写在main函数中,main函数的体量会变得非常庞大,而且一旦出错修改起来也会牵一发而动全身,总之很不方便。那有没有一种办法,可以把很多工作做在main函数之外?让主函数保持简洁易读性。比如我要对两个数字进行交换,在main函数中我需要这样写

int main(){
    int a=10;
    int b=20;
    int temp=a;
    a=b;
    b=temp;
}

看起来并不麻烦,那我如果不但想交换ab,我还想交换cd,交换ef。那这样的代码就要在主函数中重复很多次,所以想到一个办法就是我写一个函数命名为“交换两个数的值”,每次我想交换这两个数时直接调用这个函数就可以更加便捷。

函数定义语法如下:

函数类型 函数名(参数列){
    函数主体
    return 表达式
}

 

上述交换两个值的诉求用到函数封装调用的成果如下:

#include<iostream>
using namespace std;
int swap(int num1,int num2) {//定义一个名字叫做swap的函数,它的功能就是交换两个数的值
	int temp = num1;
	num1 = num2;
	num2 = temp;            //把交换功能的具体语句给这个函数去执行
	
	cout << "num1="<<num1<< " "<<"num2="<<num2 << endl;
	return num1, num2;
}
int main() {
	int a = 6;
	int b = 4;
	swap(a, b);           /*调用swap函数,可以理解为swap函数是主干道上的一个小房间,进入这个房间的要求是需要两个int类型的人,从主干道上派出a,b两个int人带着他们的原材料(6和4)进入这个小房间进行加工。最后把加工后的结果再推回主干道,就是swap中return的作用*/
    cout<<"a="<<a<<"b="<<b;
	system("pause");
	return 0;
}

运行结果如下:

可以看到在主函数中即使进行了swap交换,但是ab的值并没有改变,而在swap函数中ab的值确实被互换了,这是因为在值传递中,形参不会影响实参。我个人的理解是虽然进入了主干道的小房间,在小房间中也确实发生了变化,但是当出了那个小房间,变化就消失了。

二、函数的声明

上面说的复杂的算法可以被拆分为很多块,但是观察发现主函数很多时候是写在最后,那么能不能把主函数写在前面,被调用的函数写在后面呢,直接这样写是不行的。就要用到函数声明,声明的含义就是在一开始就告诉编译器我有一个名为xxx的函数,但是写在主函数下面,你在主函数中遇到它不要急着报错去下面找一找。

函数声明的格式为:函数类型 函数名 (参数列)

就是具体函数中的那个第一行比如swap函数中的int swap(int num1,int num2)

问题:

1.什么时候函数类型该写int什么时候该写void?

答:当函数需要返回值而且,返回值类型为int时写作int,当不需要返回值时写作void

2.所谓参数列,需要写哪些,什么时候可以不用写?

当需要传递参数时写参数列,比如swap函数,交换两数的值,需要把待交换的参数传递进来,则在函数名swap后写(int num1,int num2).而且是需要几个就传递几个,比如在swap函数中temp也是一个int型变量,就不需要写在参数列中,因为交换两个数的值这个操作并不需要知道temp

3.什么时候写return,什么时候可以不用写?

当需要返回值时就要写,不需要返回值时可以不写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值