C语言的函数的分类
库函数和自定义函数 库函数:大家参考 这个网站去学习 https://cplusplus.com/reference/ 我这里主要说一下,自定义函数的去做 1.话不多说,我们直接看语法
ret_type fun_name(para1, * )
{
statement;
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
函数就由以上部分组成 2.我们来举一个简单的例子来看看函数的使用
int max2(int a,int b){
if(a>b){
return a;
}
else{
return b;
}
}
#include<stdio.h>
int main(){
int a;
int b;
scnaf("%d %d",&a,&b);
int max=max2(a,b);
printf("%d\n",max2);
return 0;
}
这里附上一幅图:
下面我们进一步再来举个例子
#include<stdio.h>
int Max(int a, int b, int c) {
int max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
return max;
}
int main() {
int a;
int b;
int c;
printf("请输入三个整数\n");
scanf("%d %d %d", &a, &b, &c);
int max3 = Max(a, b, c);
printf("%d\n", max3);
return 0;
}
熟悉了吧,我们再来一个例子过过火
int sqr(int x){
return x*x;
}
int diff(int a,int b){
if(a>b){
return a-b;
}
else{
return b-a;
}
}
#include<stdio.h>
int main(){
int x,y;
printf("请输入俩个整数\n");
scanf("%d",&x,&y);
int z=diff(sqr(x),sqr(y));
return 0;
}
3.另外我们通过上面的例子差不多清楚了函数的定义和调用,我们来讨论一下函数传参的问题 还是通过一个例子来说
#include <stdio.h>
void Swap1(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
void Swap2(int *px, int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main(){
int num1 = 1;
int num2 = 2;
Swap1(num1, num2);
printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
上面的例子看不懂没有关系,我这里由俩个概念性的定义,大家看一下 实际参数(实参): 真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形 参。 形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单 元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
上面 Swap1 和 Swap2 函数中的参数 x,y,px,py 都是形式参数。在main函数中传给 Swap1 的 num1 ,但实际上,形式参数相当于实际参数的一个临时拷贝。num1和num2的在程序运行的时候,会在内存空间中生成一份临时变量
给 Swap2 函数的 &num1 , &num2 是实际参数。 4.函数的调用 函数的调用分为传值调用和传参调用 a.传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。 b.传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。
接下来我们还是看例子
#include<stdio.h>
double power(double x,int n)
{
int i=0;
double tmp=1.0;
for(i=0;i<=n;i++){
tmp*=x;
return tmp;
}
}
int main(){
double a;
int b;
printf("求a的b次幂\n");
scnaf("%lf",&a);
scnaf("%d",&b);
double c=power(a,b)
return 0;
}
我举个简单的例子说法,这相当于我们复印一本书,在复印版的书上写写画画,不会对原来的那本造成任何影响。
void change( int *x,int *y) {
int z = 0;
z = *x;
*x = *y;
*y = z;
}
int main() {
int a = 6;
int b = 7;
printf("交换前数字是a=%d和b=%d\n", a, b);
change(&a,&b);
printf("交换前数字是a=%d和b=%d\n", a, b);
return 0;
函数的问题就搁置在这。具体讲解请听下回分解。
|