C++零基础入门教程 #7函数

前面学了那么多语句,现在,我们“返璞归真”,来看一看我们从第一节课认识的程序框架吧:

#include<iostream>
using namespace std;
int main()
{
    
    return 0;
}

这几节课,我们就来重新解读一下这个框架。今天,我们将从第3行的main函数入手。

大家应该注意到了,我们之前提到main时后面都会跟着“函数”一词。

那么,什么是函数呢?

数学中的函数大家并不陌生,但C++中,函数更像是一个固定的方法。

比如说,如果之前第五课“查找指定数”有多个输入,应该怎么办?

用之前的方法,可以这样写(假设有q组询问):

#include<iostream>
using namespace std;
const int MaxN = 100005;
int a[MaxN], n, q;
int main()
{
    cin >> n >> q;
    for(int i = 1; i <= n; i++) cin >> a[i];
    while(q--){
        int x, ans = -1;
        cin >> x;
        for(int i = 1; i <= n; i++){
            if(a[i] == x){
                ans = i;
                break;
            }
        }
        cout << ans << endl;
    }
    return 0;
}

我们用一个while循环(循环q次)包着查询代码,实现多组查询。

但是,如果我们要在代码中随时调用查询功能,是不是每一次都要写for循环呢?

当然没这个必要。我们可以利用函数解决:

#include<iostream>
using namespace std;
const int MaxN = 100005;
int a[MaxN], n, q;
int query(int x){
    int ans = -1;
    for(int i = 1; i <= n; i++){
        if(a[i] == x){
            ans = i;
            break;
        }
    }
    return ans;
}
int main()
{
    cin >> n >> q;
    for(int i = 1; i <= n; i++) cin >> a[i];
    while(q--){
        int x;
        cin >> x;
        cout << quuery(x) << endl;
    }
    return 0;
}

这里,我们在第5行定义了一个函数query(当然可以叫其他名字),具体方式如下:

返回类型 函数名 修饰符(参数1, 参数2...);    //声明函数:表明这里有函数,避免先调用导致的编译出错
返回类型 函数名 修饰符(参数1, 参数2...){...}//函数实现(此前不声明也没关系)

先不管声明和实现的区别,来看前面相同的部分:
返回类型可以是 void(无返回值),  int(整数), double(双精度浮点数)等。函数实现中,用return语句返回数,就像main函数最后有return 0;语句(return后函数直接跳出,即不继续运行)

函数名的定义规则和变量名一样,开头不能是数字且只包含字母、数字或下划线(_)。

后面的修饰符可有可无,时间比较紧时一般会加上inline,这里不作详细说明。

括号里面是参数列表,可以理解为是传进几个变量的值。

如,void f(int a, int b);表示有一个名为f的无返回值函数,需要传入a和b两个参数,

即调用时 f(1, 2)则实现时函数内a为1,b为2。

注意,这里说的是函数内。函数执行完毕后,函数内定义的所有变量(包括参数)都会无效:

#include<iostream>
using namespace std;
void f(int a, int b){
    int t = a; a = b; b = t;
}
int main()
{
    int a = 1, b = 2;
    f(a, b);
    cout << a << ' ' << b;
    return 0;
}

这里的f()函数看似是将a和b交换,实则输出的仍然是1和2。

那f函数做了什么呢?让我们改一改f()函数:

void f(int a, int b){
    int t = a; a = b; b = t;
    cout << "f(): a = " << a << ", b = " << b << endl;
}

令人震惊的是,修改后,f函数内输出的是2和1。也就是说,f函数实现了函数内a,b两数的交换,

但这种“交换”影响不到main函数中的值。这种方式传入的只是一个值,如传入a和b等于传入1和2,

并没有把“变量”a和“变量”b传入。具体的原因我们讲指针和内存分配时会提到。

好了,以上就是这篇文章的全部内容了。最后,如果你觉得这篇文章还不错或者对你有帮助,麻烦点个收藏点个赞,这是免费的,你随时可以取消。你的支持是作者最大的动力,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起床气233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值