一、什么是函数?
为了方便说明我们先引入一个约会的场景例子:

#include <stdio.h>
#include <stdlib.h>
int prepare()
{
printf("出门前准备中!\n");
printf("穿衣洗漱!\n");
printf("准备完毕!\n");
return 0;
}
int inDiDi(){
printf("打开手机!\n");
printf("打开滴滴!\n");
printf("发布订单!\n");
printf("等待司机!\n");
return 0;`
}
int onTheRoad()
{
printf("在路上!\n");
printf("订饭店!\n");
printf("打滴滴中!\n");
inDiDi();
printf("通知女神!\n");
printf("路上的事情准备完毕!\n");
return 0;
}
int datting()
{
printf("约会中!\n");
printf("吃饭中!\n");
printf("看电影中!\n");
printf("逛街中!\n");
printf("约会完毕!\n");
return 0;
}
int goBackHome()
{
int mark = 0;
printf("回家中!\n");
if(mark == 0){
printf("上不了楼,拥抱一下,告别!\n");
}else{
printf("跟她回家!\n");
}
return 0;
}
int main()
{
//以下自定义函数,需要把函数做出来
prepare();//出门前的准备
onTheRoad();//在路上
datting();//见面
goBackHome();//回家
system("pause");
return 0;
}
函数是C语言程序的基本组成单位,是完成某一个特定功能的独立程序模块,包括库函数和自定义函数两种。我们在之前的程序中用到的printf();\scanf()等就是库函数,由C语言系统提供定义编程时直接调用即可。
而自定义函数就想上边例子中的prepare()、inDiDi()、onTheRoad()、datting()、goBackHome()这些,我们自己编写来实现不同功能的模块叫做自定义函数。即需要用户自己定义的函数为自定义函数。
二、如何定义函数?
函数的定义的一般形式
函数类型 函数名 (形式参数表) //函数首部
{
实现过程 //函数体
}
函数首部
- 函数首部由函数类型、函数名、形式参数表组成。
- 函数类型值得是函数结果返回的类型。与return语句中表达式的类型一致。
- 形式参数表是用来给出函数运行索要需要的相关已知条件;多个形参用逗号隔开,每个形参都声明类型。
函数体
用来体现函数的实现过程,由一对大括号内的若干条语句组成,并用return语句返回结果 (结果的类型要与函数类型一致) 。
例:
int goBackHome()
{
int mark = 0;
printf("回家中!\n");
if(mark == 0){
printf("上不了楼,拥抱一下,告别!\n");
}else{
printf("跟她回家!\n");
}
return 0;
}
三、如何调用函数?
函数的一般调用形式
函数名(实际参数);
//例:
#include <stdio.h>
#include <stdlib.h>
void buyRice2(int jinshu){
printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);
}
int main()
{
int a = 10;
buyRice2(a);
printf("%p\n",&a);
printf("%d\n",a);
system("pause");
return 0;
}
函数调用的过程
说到函数的调用,那我们就得提到函数的调用过程,首先我们知道任何C程序的执行到要从main()函数开始,在main()函数得执行过程中遇到了函数调用,那么主函数会被暂停执行,转而执行相应的函数,执行完成后再返回主函数继续向下执行。
参数传递
函数定义时其首部的参数就叫形参例如上边例子中buyRice2函数首部的"jinshu",而主调函数的参数则被称为实参,实参是实际参与函数体执行的参数,如main函数里的buyRice2(a);中的“a”。
另外需要注意的就是:
- 形参和实参必须一一对应,顺序一致,两者数量相同。
- 类型尽量一致。
- 函数的形参必须是变量。
- C语言规定在参数传递中,将实参的值赋值给形参,这是一种单向传递,也就意味着形参的值得改变不会影响实参。
- 函数中return的作用有两个,一个是结束函数的运行,二十带着结果返回主调函数。且return只能返回一个值。
形式参数和局部变量的区别
#include <stdio.h>
#include <stdlib.h>
//1.形式参数作用域仅限于该函数
//2.形式参数有自己的内存空间
/*a.空间的生存期
b.何时申请了该空间
c.当该函数被调用的时候,才申请了内存地址空间,才有了这个变量;
d.同时这个空间内的数据被赋值成为实际参数的值;函数调用把实际参数的值拷贝一份给形式参数
e.何时释放了该空间
f.函数执行结束后,该空间由内存管理单元自动回收(释放)*/
void buyRice2(int jinshu){
//jinshu是局部变量也是形式参数,他的作用域仅限该函数
printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);
}
int main()
{
int a = 10;
buyRice2(a);
printf("%p\n",&a);
printf("%d\n",a);
system("pause");
return 0;
}
这里还有一个例子:
#include <stdio.h>
#include <stdlib.h>
void test(){
int data = 100;
printf("data = %d\n",data);
}
void test2(){
int data = 101;
printf("data = %d\n",data);
}
void test3(){
int data = 102;
printf("data = %d\n",data);
}
int main()
{
test();
test2();
test3();
system("pause");
return 0;
}
四、一般定义函数的几种情况
无返回值无参数
#include <stdio.h>
#include <stdlib.h>
void buyRice(){
printf("去买米\n");
}
void printScreen(){
printf("*-----------------------*\n");
printf("* *\n");
printf("* *\n");
printf("*----------Marry--------*\n");
printf("* *\n");
printf("* *\n");
printf("*-----------------------*\n");
}
int main()
{
buyRice();
printScreen();
system("pause");
return 0;
}
- void代表无返回值,不需要return
无返回值有参数
#include <stdio.h>
#include <stdlib.h>
void buyRice2(int jinshu){
printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);
}
int main()
{
int a = 10;
buyRice2(a);
printf("%p\n",&a);
printf("%d\n",a);
system("pause");
return 0;
}
有返回值有参数、有返回值有多个同类型参数
#include <stdio.h>
#include <stdlib.h>
int add(int x,int y){
int z;
z = x + y;
return z;
}
int min(int x,int y){
int z;
z = x - y;
return z;
}
int cheng(int x,int y){
int z;
z = x * y;
return z;
}
int chu(int x,int y){
int z;
z = x / y;
return z;
}
int main()
{
int data;
int data2;
int ret;
while(1){
printf("请输入第一个数据:\n");
scanf("%d",&data);
printf("请输入第二个数据:\n");
scanf("%d",&data2);
ret = add(data,data2);
printf("结果:%d + %d = %d",data,data2,ret);
ret = min(data,data2);
printf("结果:%d - %d = %d",data,data2,ret);
ret = cheng(data,data2);
printf("结果:%d * %d = %d",data,data2,ret);
ret = chu(data,data2);
printf("结果:%d / %d = %d",data,data2,ret);
}
system("pause");
return 0;
}
本文详细介绍了C语言中的函数概念,包括函数的定义、调用方式、参数传递机制及不同类型函数的应用实例。通过生动的例子帮助读者理解函数的工作原理。
2046

被折叠的 条评论
为什么被折叠?



