C语言学习(九)函数

我们在编程的时候会遇到比较复杂的程序,有时候可以把一些含有特定功能的一部分写成一个函数,这一部分就是学习函数的写法。尤其是很多时候我们会遇到代码复制的情况,这时候用函数就会使代码变得更好,同时也方便进行修改和使用。

1. 函数:

函数是一块代码,可以接受0个或多个参数,做一件事情,并返回0个或1个值。

例1.1求和函数:sum()函数部分

void sum(int begin,int end)
{
	int i;
	int sum=0;
	for(i=begin;i<=end;i++)
	{
		sum+=i;
	}
}

2. 函数头

void表示返回类型,sum为函数名,“()”内部的是参数表,表明这个函数有两个int类型的参数。

例1.2:求和函数:主函数部分

int main()
{
	sum(20,30);
	printf("%d\n",sum);
	return 0;
}

3. 函数调用:

函数名(参数值);
其中“()”起到表示函数调用的作用,即使没有参数也要加“()”。
如果有参数,需要给出正确的数量与顺序,这些值会按照顺序依次用来初始化函数中的参数。

例2.1 最大值判断

int max(int a,int b)
{
	int ret;
	if(a>b)
		ret=a;
	else
		ret=b;
	return ret;
}

int main()
{
	int a=6,b=4;
	int i;
	i=max(a,b);
	printf("max(%d,%d)=%d\n",a,b,i);

	return 0;
}

4. 函数返回及结果传递

return停止函数的执行,并送回一个值
return;
return 表达式(一个值也是一个表达式);

有返回值的时候进行函数调用时,如果需要得到返回值,可以用一个变量来存储函数返回值,如例2的 i=max(a,b); 这一语句。

如果没有返回值可以用void这个无返回值的函数类型,如果有返回值则需要用int类型的函数定义。

5. 函数声明

函数先后关系:
如上面的例2.1,把max()写在上面,是因为:
C语言编译器是自上而下顺序进行代码分析,如果看到max(a,b),它需要知道sum的函数类型、参数类型等的信息,所以函数调用应该在函数调用之后。

函数声明:
如果不知道先后,我们则需要在主函数前面进行函数声明,实际可以将函数头复制到最前面,加“;”既可,具体方法如下

例2.2 最大值判断 函数声明

#include<stdio.h>

int max(int a,int b);//声明

int main()    //主函数
{
	int a=6,b=4;
	int i;
	i=max(a,b);
	printf("max(%d,%d)=%d\n",a,b,i);

	return 0;
}

int max(int a,int b) //函数定义
{
	int ret;
	if(a>b)
		ret=a;
	else
		ret=b;
	return ret;
}

6. 参数传递

在前面的部分介绍过对于有返回值的函数,从主函数传递参数到调用的函数中进行计算,再返回参数,这些都是函数之间的参数传递。如果传递过程中有类型不匹配问题,C语言会进行强制类型转换,直接转化为对于类型的参数进行返回。

例3 交换两个值

#include<stdio.h>

void swap(int a,int b);

int main()
{
	int a=5;
	int b=6;
	swap(a,b);
	printf("a=%d,b=%d",a,b);

	return 0;
}

void swap(int a,int b)
{
	int t=a;
	a=b;
	b=t;
}

对例3进行编译运行,我们会发现并没有a、b值交换的作用。这里就涉及了函数之间传递“传过去的是什么”的问题,分析如下:

传值:每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系。函数参数传递过程中有实际参数与形式参数的说法,但是我们现在可以简单的理解为参数与值的关系,把函数间的参数传递直接理解为就是进行值的传递,而不是对参数进行传递。

7. 本地变量

函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量势函数这次运行所独有的,称作本地变量。定义在函数内部的变量就是本地变量,参数也是本地变量。

变量的生存期与作用域:
生存期是指变量从什么时候出现,在什么时候消亡;作用域是变量在什么范围内可以起作用;对于本地变量,变量的生存期与作用域是统一的,都是大括号内部的部分。

对于例3来说,swap()函数中的a、b、t都是swap()块中的本地变量,对main中的a、b无关。

本地变量规则:
本地变量是定义在块内的;
程序运行到这个块之间这个本地变量是不存在的,运行完这个块这个变量就消失了;
块外面定义的变量在里面依然有效;
块里面定义的参数如果与外面的同名则覆盖了外面的参数;
本地变量不会被默认初始化。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值