在本篇文章中,我会为大家介绍C语言函数的一些基本的用法。王子公主们请看下文:
一.函数的概念
其实在以往的学习生涯中,我们早已在数学中接触了函数。不同于数学中的函数,C语言的函数能实现的功能更加强大。
C语⾔中的函数就是⼀个完成某项特定的任务的⼀小段代码。这段代码是有特殊的写法和调用方法的。 C语⾔的程序其实是由无数个小的函数组合⽽成的,也可以说:⼀个大的计算任务可以分解成若⼲个较小的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复⽤的,提升了开发软件的效率。
在C语言中,我们一般会遇到两类函数:库函数和自定义函数。
二.库函数
C语⾔标准中规定了C语⾔的各种语法规则,C语⾔并不提供库函数;C语⾔的国际标准ANSI C规定了⼀ 些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。这些函数就被称为库函数。 我们前⾯内容中学到的 printf 、 scanf 都是库函数,库函数的也是函数,不过这些函数已经是现成的,我们只要学会就能直接使⽤了。有了库函数,⼀些常⻅的功能就不需要程序员⾃⼰实现了,⼀ 定程度提升了效率;同时库函数的质量和执⾏效率上都更有保证。
下面是有关库函数查看和学习使用的一些网站
库函数相关头⽂件:https://zh.cppreference.com/w/c/header
C/C++官⽅的链接:https://zh.cppreference.com/w/c/header cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
下面以sqrt函数为例,简要分析一下其包含的头文件及使用方法:
可以看到上图中包含了函数名(sqrt)、函数所需的参数(double x)、函数的返回类型(double)以及函数sqrt的作用(返回传入参数的平方根),需要包含的头文件我们可以用<math.h>。
下列代码摘自C/C++的官方解释:
#include <stdio.h>
#include <math.h>
int main ()
{
double param, result;
param = 1024.0;
result = sqrt (param);
printf ("sqrt(%f) = %f\n", param, result );
return 0;
}
三.自定义函数
库函数是由编译器厂商提供的一些代码,极大地便利了我们平时的使用。但是,作为程序猿,你所遇到的问题绝对不是能完全通过库函数就能解决的。这时,自定义函数就闪亮登场了。自定义函数能极大地展现一个程序猿的想象力,展示出一个程序猿的代码水平,体现一个程序猿解决问题的能力。
1.函数的语法形式
ret_type fun_name(形式参数)
{
//函数内容,想要实现的效果
}
在上面这串代码中,ret_type是函数的返回类型,即你希望它给你返回什么类型的值(当然,也可以什么都不返回,设置函数返回类型为void)。fun_name是函数名,一般函数名需要起的有一定含义,比如Add函数,意思就是实现加法,方便自己和别人读懂、知道这个函数的基本功能。(形式参数)表示的是调用这个函数所需要传给这个函数的值。{ }这个叫做函数体,承载的是函数能实现的效果,也是你自由发挥的空间。
2.以Add函数为例讲述函数的语法
请看代码:
#include<stdio.h>
//以Add函数为例讲述函数的基本语法
int Add(int x, int y)
{
int ret = x + y;
return (x + y);
}
int main()
{
int a =5, b = 4;
int c = Add(a, b);
printf("%d", c);
return 0;
}
首先,我们假装我们不会直接的加法。看到main函数,我先是定义了两个实参a和b,然后定义一个变量c用来接收a+b的值,在这里我们需要调用Add函数来帮我们实现加法的操作。请看Add函数,假设相加的两个数都是整型,我们需要返回的值也是整型,那么我们定义Add函数的返回类型为int;Add函数的功能是实现两个数的相加,所以我们需要接收被执行操作的两个值,这里我们设置了两个形式参数x,y,在没有调用Add函数前,x与y是不占用内存的,调用时才会给x和y开辟一块空间,使用完这块内存就会被释放。注意:形式参数与实际参数的变量名称是可以相同的!我们在main函数中可以通过调用Add函数来实现a+b的操作,当然这个函数是一直存在的,当计算完a+b后,还可以继续调用它,进而达到函数的复用。
值得被鼓励的是大家可以在函数的部分多写写注释,能让自己和其他看代码的人能更快更清楚地了解你写这个代码的意图。
四.形参和实参
1.实参
请看回到刚刚的那串代码:a,b,c就是我们定义的三个实参,实参的全名是实际参数,就是真实传递给函数的参数。
2.形参
看到Add函数的()内的x和y了嘛,那两个就是形式参数,简称形参,用于接收实参传过来的值,并参与函数内部的一系列操作。
3.实参与形参的关系
虽然我们提到了实参是传递给形参的,他们之间是有联系的,但是形参和实参各⾃是独⽴的内存空 间。我们不能通过修改形参来改变实参,若想要修改实参,我们需要在后面讲述指针了之后才能上手操作。
下面请你复制下面的代码打开VS,打开监视,自己运行调试一下,观察a、b、x、y的地址。
#include <stdio.h>
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 0;
int b = 0;
//输⼊
scanf("%d %d", &a, &b);
//调⽤加法函数,完成a和b的相加
//求和的结果放在r中
int r = Add(a, b);
//输出
printf("%d\n", r);
return 0;
}
今天的文章分享就到此为止咯,下一篇文章会继续介绍函数的return语句 、数组做函数参数 、嵌套调⽤和链式访问、函数的声明和定义。