函数和参数

1.简介

        函数,相信大家在数学领域中早已或多或少地对函数有了一些了解和学习,与数学领域不同,在c语言中将函数定义为完成特定任务的独立程序代码单元。

2.函数的作用 

        为什么要使用函数呢?首先,使用函数可以省去编写重复代码的苦差,如果程序要多次完成某项任务,那么只需要编写一个合适的函数。其次,使用函数能够提高代码的可读性,更方便后期的修改完善

3.两种函数类型

        在c语言中,一共有两种函数类型,一种是c语言自带的库函数,另一种是需要程序员自己编写的叫自定义函数。

库函数

        下面我们先来认识一下c语言的库函数的使用,使用c库函数需要包含相应的头文件。以下是几种常用的头文件和它们的功能:

1、<stdio.h>:提供输入和输出功能的函数,例如 printf()scanf()fopen()fclose() 等。

2、 <stdlib.h>:提供通用工具函数,如动态内存分配malloc()free())、程序退出(exit())、随机数生成(rand()srand())等。

3. <string.h>:提供字符串处理函数,如字符串复制(strcpy())、连接(strcat())、比较(strcmp())、长度计算(strlen())等。

4、<math.h>:提供数学运算函数,如平方根(sqrt())、幂运算(pow())、三角函数(sin()cos()tan())等。

5、<ctype.h>:提供字符处理函数,如字符分类(isalpha()isdigit()islower())、字符转换(toupper()tolower())等。

6、<time.h>:提供时间和日期处理的函数,如获取当前时间(time()localtime())、时间差计算(difftime())等。

         如果大家对c库函数有兴趣,也可以跳转到下面这几个网站进行学习查询,这里就不再做过多赘述:

http://www.cppprefence.com(可以切换中文用起来比较方便)

https://cplusplus.com/

        还有另一种方法不需要网络也可以使用,但是需要下载MSDN,下面是另一位博主的下载教程的博客(附带使用说明):

https://blog.csdn.net/why1472587/article/details/124825657

自定义函数

        自定义函数,顾名思义:就是由程序员自己定义的函数,自定义函数相比库函数更加灵活多变,能解决的问题也自然更多。下面是一个自定义函数的结构表示:

        上述的自定义函数能够完成两个数大小的比较,具体代码如下:

#include <stdio.h>

int MAX(int x, int y) {
	return x > y ? x : y;
}
int main()
{
	int m = 10;
	int n = 20;
	int max = MAX(n, m);
	printf("%d", max);
	return 0;
}

4.函数的实参与形参

        函数的内部有实际参数(实参)和形式参数(形参)两种参数,用简单的话描述:调用函数时的参数为实参;函数中定义的参数为形参。

        下面我们通过两串代码来剖析实参和形参(代码功能:交换两个数的位置

注意:这是一段错误的代码,它无法交换两个数。

#include <stdio.h>
void Change(int m,int n) //行参
{
	int tmp = 0;
	tmp = m;
	m = n;
	n = tmp;
}
int main()
{

	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前:%d %d\n", a, b);
	Change(a, b);		//实参,传值调用									
	printf("交换后:%d %d\n", a, b);
	return 0;
}

        

       可以看到这串代码并没有完成任务,下面我们通过监视来看看程序中错误的原因:

        可以看到,程序将实参a、b的值传递给了形参m、n,但他们的存储地址并不相同,虽然在函数中,m、n的值做了交换(在函数调用后m、n销毁),并没有影响到实参a、b。

        由此可知,实参在调用时必须要有确定值,它可以是值、表达式、变量、函数;而形参在函数调用时才实例化(分配内存单元),在函数调用完后销毁,它只在函数中有效。

        那么我们应该如何让a、b的值交换呢?别急,让我们继续往下看!下面我们将讲述函数的另一种调用方式,他就能够使a和b的值调换。

5.函数的调用方式

        刚才的代码我们使用的调用函数为传值调用,由刚才的调试可知:它使实参和形参分别占有不同的内存块,对形参的修改并不能影响实参。

        下面我们介绍另一种函数调用方式,传址调用:它将函数外部创建变量的内存地址传递给函数参数,这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部直接操作函数外部。使用它就可以交换刚才a和b的值。

正确代码

#include <stdio.h>
void Swap(int *pa, int *pb) //行参
{
	int tmp = 0;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{

	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前:%d %d\n", a, b);
	Swap(&a, &b);//实参,传址调用									
	printf("交换后:%d %d\n", a, b);
	return 0;
}

        看到这里,希望大家能给博主点一个免费的三连,博主在此跪谢大家了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值