函数的调用
在C语言中,函数是执行特定任务的代码块,它允许代码重用和模块化。函数调用是程序执行过程
中的一个重要环节,它涉及到将控制权从一个函数转移到另一个函数。
函数的调用时参数的传递方式分为两种
1.传值调用:实参的值会被复制给形参。在函数内部对形参的修改不会影响到实参。
例子
int fx(int a, int b)
{
return a+b;
}
int main()
{
int a=4,b=5;
int c=fx(a,b);
}
2.传址调用:通过传递实参的地址(即指针),函数内部对形参的修改会影响到实参。这种方式通
常用于需要修改传入参数的场景。
例子
void jiaohuan(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
int main()
{
int z=10,x=20;
jiaohuan(&z,&x);
printf("%d,%d",z,x);
}
嵌套调用
嵌套调用是指在一个函数的执行过程中调用了另一个函数。
嵌套调用常用于将一个复杂的功能拆分成多个独立的子功能,每个子功能由一个函数实现,从而提
高代码的可重用性和模块性。
举个例子
int fx(int a,int b)
{
return a+b;
}
int yx(int a,int b)
{
a=fx(a,b);
return a*b;
}
这里定义了两个函数fx和yx,在yx中又用到了fx这个函数,这就叫嵌套调用。
注意:函数可以嵌套调用 但是不能嵌套定义 :就是不能在一个函数里面再写一个函数
链式访问
函数的链式访问就是把一个函数的返回值作为另外一个函数的参数。
举个例子
int fx(a,b)
{
return a+b
}
int main()
{
int a=4,b=9;
printf("%d",fx(a,b));
}
这里就把fx()的返回值即a与b的和作为参数来让printf打印出来。
再比如
int main()
{
printf("%d",printf("%d",printf("%d",43)));
}
这里就会打印出来4321,这是由于链式访问是将返回值作为参数而printf函数的返回值是打印在屏
幕上的字符的个数。
函数的声明和定义
函数的声明和定义是编程基础中非常重要的概念。函数声明告诉编译器函数的名称、返回类型和参
数,而函数定义则提供了函数的具体实现。
函数的声明
函数声明是对函数的一个预先说明,它告诉编译器函数的存在,使得函数可以在后续代码中被调
用。函数声明包括函数的返回类型、函数名和参数类型。
例如
int fx(int,int);
这就是fx函数的一个声明,这里说明了该函数的返回类型,函数名及参量类型
函数的定义
函数定义是函数的具体实现,它包括函数的返回类型、函数名、参数列表(包括参数的类型和名
称)以及函数体。函数体中包含了实现函数功能的代码。
具体的例子上文中有用到。
如果在函数定义之前函数被调用,那样就要在函数被调用之前先对函数进行声明。
例子
int main()
{
int a=10,b=20;
int fx(int,int);
int c=fx(a,b);
printf("%d",c);
}
int fx(int a,int b)
{
return a+b;
}
这里在调用fx前就对fx进行声明了,这里的声明只是告诉说有这样一个函数具体有没有就得自己定义。
不过如果定义在调用前面就不用声明。
函数声明一般放在头文件中,引用自己的头文件时用" ",
函数的定义一般放在对应的.c源文件文件中。
函数递归
把大事化小
递归函数是一种在其定义中调用自身的函数。它是一种强大的编程技巧,能够将复杂问题分解为更
小、更易于管理的问题。递归函数通常包含两个主要部分:基本情况(递归终止条件)和递归部分
简单来说函数的递归就是函数自己调用自己。
递归函数的特点
1.每次函数调用都有自己的变量实例
2.每次调用都会有一次返回,逐层返回直到最初的调用
3.递归调用前的语句和被调用函数具有相同的执行顺序
4.递归调用后的语句执行顺序与被调用函数的顺序相反(即从最后一次调用函数那开始到第一次调用函数)
5.必须有终止语句,即基本情况,以防止无限递归
递归的两个必要条件
1.存在限制条件,当满足这个限制条件时递归便不再继续
2.每次递归调用之后越来越接近这个限制条件
举个例子,
按顺序打印一个数字的每一位。
#include <stdio.h>
#include <string.h>
void zgh (int a)
{
if(a>9)
{
zgh(a/10);
}
printf("%d\n",a%10);
}
int main()
{
printf("请输入一个数字");
int a=0;
scanf("%d",&a);
zgh(a);
return 0;
}
上述代码就利用了递归函数完成了题目要求。
再比如利用递归求阶乘
#include <stdio.h>
#include <stdlib.h>
int dg(n)
{
if (n > 0)
{
return n * dg(n - 1);
}
else
{
return 1;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d", dg(n));
}
函数的递归在调用时需要空间,而它得跳出递归后才从后到前依次进行,所以如果调用次数太多的话就会造成栈溢出。
标签:调用,函数,递归,int,C语言,学习,fx,printf From: https://blog.csdn.net/2402_87772772/article/details/143089483