🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
文章目录
一、函数定义与分类
1. 函数是什么
数学间我们很容易见到有函数,比如有一次函数,二次函数,反比例函数等等,可是你了解C语言的函数吗?
维基百科对函数的定义:子程序,是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
2.函数的分类
- 库函数
库函数的使用不需要专门去记,我们可以通过查找了解它们的使用方式,这里推介一个网站www.cplusplus.com
- 自定义函数
如果库函数能干所有事情,那么还要程序员干什么,自定义函数由程序员自主设计,和普通的函数一样有函数名、返回类型、形式参数等。
二、函数的参数
1.实际参数(实参)
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。
在调用函数时,它们都必须有确定的值,以便把这些值传送给形参。
2.形式参数(形参)
形式参数是指函数名后括号中的变量。
形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。因此形式参数只在函数中才有效。
三、函数的调用
当我们的函数写好后,我们需要把他们和主函数搭配起来,这样就可以实现函数应该体现出来的效果了,以下介绍的是两种常用的调用方式,传值调用和传址调用
1. 传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。所以,我们在不改变函数实参的时候可以使用传值调用。
示例如下
#include"stdio.h"
int add(a, b)
{
int sum = 0;
sum = a + b;
return sum;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = add(a, b);
printf("%d", c);
return 0;
}
在程序中,我们只是对a和b进行操作,没有改变a和b的数值属性,在这里我们就可以使用传值调用,再将操作得到的值返回。
2.传址调用
当我们调用函数想要改变实参的值,这是我们应该使用传址调用,因为形参接受实参值时会开辟另外的空间来存放,这时想要通过改变形参来达到改变实参的目的,就不会实现,因为地址不同,所以我们要传地址。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
下面介绍下简单的指针思路
#include"stdio.h"
int main()
{
int a = 10;
int* pa = &a; //pa存了a的地址
*pa = 20; //找到a,并对其解引用
printf("%d", a);
return 0;
}
我们再将这种思路放到一段程序上,交换两个整型值
void swap(int* pa,int* pb)//返回类型为void表示不返回,此处的int* pa与int* pb表示形式参数和它们的类型
{
int tmp = *pa; //tmp = a
*pa = *pb; //a = b
*pb = tmp; //b = tmp
//跳出函数时,被销毁的形参只是两个指针变量,此时实参的交换已经完成
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a = %d b = %d\n", a, b);
swap(&a, &b);
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
四、函数的嵌套调用和链式访问
1.嵌套调用
函数和函数之间可以相互调用,还记的我们再进入C语言写的第一个代码吗,没错,打印“hello world”
int main()
{
printf("hello world");//printf()也是一个函数
return 0;
}
我们的主函数main(),调用了打印函数printf(),这也是函数调用的一种表现形式。
2.链式访问
把一个函数的返回值作为另外一个函数的参数。
这里卖一个小关子,以下代码输出的是什么
#include<stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
没错,答案是4321
这里可以先说明下,printf()函数返回的是一个打印字符的个数,在第三层的代码printf("%d",43)
打印了43,并且返回打印的字符个数2,所以到了第二层printf("%d",printf("%d",2))
,打印了2,并且返回了打印的字符个数1,到了第一层printf("%d",1)
,最后打印1,程序结束。也就形成了4321的结果。这就是在链式访问里面比较经典的题目啦
总结
本文介绍了C语言函数相关基本定义和相关概念,下文将继续讲解函数相关的知识,如声明和定义,以及递归相关的知识点,还会有例题讲解,如哪里有讲的不好或者有不懂的欢迎在评论区指正,谢谢