C语言--有返回值与无返回值的函数调用(函数内容一)

有返回值和无返回值之间的函数调用

C语言中创建及调用函数的简介

上期在说到Python实现阶乘相加时,对于函数的调用及递归没有进行详解,这次主要介绍清楚C语言中的函数调用。

在C语言中,不管是对数值进行交换,或者是对数组进行排序,不考虑其时间复杂度,我们都喜欢创建一个调用函数来实现其功能。接下来,就一起进行了解吧!
首先,编写函数的一般形式为:

函数类型 函数名(参数类型 参数,...){函数体/代码块}

在进行函数调用时,必须在主调函数的函数体内首句对被调函数进行声明。其函数声明的一般形式为:

函数类型 函数名(参数类型 参数,...);

创建函数时与函数声明类似,把创建的函数的{}内容变成分号放在主调函数内即完成了对被调函数的声明。其中对于函数声明也有一些简化的写法,这里不进行讲解。
在知道了函数的编写及调用之后,我们来了解函数调用的特性,下面看一串代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	//编写调用函数,实现两个变量的值的交换
void max(int x,int y);  //声明函数max
int a=3,b=5;        //定义变量a,b
max(a,b);          //调用函数max,将实参a,b传入max函数
printf("a=%d,b=%d\n",a,b);   //输出a,b
system("pause");
return 0;
}
void max(int x,int y)    //此时定义的是一个无返回值的max函数,函数主体内可无需return语句
//将实参a=3传给形参x,将实参b=5传给形参y
{
	int temp;
	temp=x;
	x=y;             //老三样,进行x,y之间的值互换
	y=temp;          //调用结束,回到main函数
}

在进行编译运行之后,运行结果为:a=3,b=5

在函数体内,已经完整的剖析了整串代码,那为什么进行的想x,y之间的值的互换,为什么a,b的值没有变换呢?
因为实参向形参的数据传递是“值传递”,单向传递,只能由实参传给形参,而不能由形参传给实参,实参与形参在内存中占有不同的存储单元,所以在调用无参函数时,进行普通的变量互换是无法传值回主调函数的
而在定义有返回值的函数中,函数的返回值是通过函数的return语句获得的。return语句将被调函数中的一个确定值返回至main/主调函数中。
接下来再看一段代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	//编写调用函数,实现两个变量的值的交换
int max(int x,int y);
int a=3,b=5;
a=max(a,b);
b=3;
b=max(a,b);
printf("a=%d,b=%d",a,b);
system("pause");
return 0;
}
int max(int x,int y)  //定义了一个返回值为int型的函数
{
	int temp;
	temp=x;
	x=y;
	y=temp;
	return x;    //返回给main函数的值为x的值
}

运行结果为:a=5,b=3
根据对上一个函数的详细过程同样分析这段代码,这里不再赘述,注意这里的b值并不是重新赋值后输出的3,而是进行函数调用而返回的3。
从这里我们可以看出可以通过定义有返回值的函数来进行获取值,但必须注意的是,一个return语句只能返回一个与其返回值类型相对应的值。这是它的局限性。
同时在定义函数时,必须对函数类型进行指定,如果无返回值类型必须写上void,如上:void max(参表列){}
有返回值必须写定返回值类型,返回值类型是由定义函数时指定的函数类型决定的
,如上:

int max(参表列){
 函数体 
return int型的变量;
}

但其实我们学习了指针之后,我们可以通过指针来改变其值,看代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	//编写调用函数,实现两个变量的值的交换
void max(int *x,int *y);
int a=3,b=5;
max(&a,&b);
printf("a=%d,b=%d",a,b);
system("pause");
return 0;
}
void max(int *x,int *y)
{
	int temp;
	temp=*x;
	*x=*y;
	*y=temp;
}

输出结果为:a=5,b=3
指针的知识,到函数内容三时进行更新。
注意Python中的函数定义与C语言中是有区别的,简化了很多语法规则。读者注意区分,学完了C语言的语法规则后看Python中代码有帮助。
如觉得内容稍可,请留下你们的在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值