C语言基础_01:函数的定义及调用

- 函数的定义

C语言的函数一般需要给出返回值类型,如果没有给出,系统默认定义返回值类型为整型。如果函数不需要返回值类型,就应该声明为void类型,即为无类型,函数返回不带有任何值。

  • 函数定义的一般类型
<函数返回值类型>  函数名  (<类型名><形式参数1>,<类型名><形式参数2>,...{
	函数体
}

实例1:

void main(void)
{
	printf("主函数main不能被其他函数调用");
}

函数的调用

实例:

int larger(int x, int y);
void main(){
	int larger();
	int x=1,y=4,z;
	z = large(x,y);
	printf("the larger number is %d.",z);
}
int larger(int x, int y){
	int z;
	z=x>y?x:y;
	return z;
}
  • 函数调用的形式
    函数名(实参表)
    函数被调用可以是作为一条独立的语句,也可以作为一个表达式,也可以是另一个函数的参数。

  • 函数调用的注意事项
    函数的返回值可以是变量的值,也可以是表达式,如果是表达式,传递的是表达式运算结果。

    函数定义在被调用之前,在被调用的代码块中可以不用说明,实际上,只要函数在被调用之前被编译的,就可以不用进行说明,现在很多IDE都会自动编译函数,所以源代码里省略说明在编译时也不会报错。

    当函数返回数值时,会将返回值强制转化为函数定义时的数据类型。

    主函数不可以被其他的函数调用。

    函数以源文件进行编译,每个函数都可以单独编译,但是函数不可以嵌套编译。

参数

函数的参数根据其所处的位置,可以定义为形参和实参。在C语言里,只能由实参传递数据给形参,而不可以反过来,他们之间的数据传递方式有两种:

  • 传值传递:传递实参所具有的数值,操作的是一个重新创造的数值。
  • 传址传递:传递数据所在的地址,可以直接地址存储的数据进行操作。

正是由于这种单向传递的性质,实参是一种有形有值的实际存在的参数,而形参只具有形式,而在程序中却没有实体,而且只在实参传递数值给形参之后,他才具有了意义。

最能比较这两种传递方式的就是交换数值问题,下面分别是两种传递方式的实例:

void swap(int x, int y){
	int t;
	t=x;x=y;y=t;
	printf("形参:x=%d,y=%d\n",x,y);
}
void main(){
	int x=3,y=4;
	swap(x,y);
	printf("实参:x=%d,y=%d\n",x,y);
}
void swap(int *x, int *y){
	int t;
	t=*x;*x=*y;*y=t;
	printf("形参:*x=%d,*y=%d\n",*x,*y);
}
void main(){
	int x=3,y=4;
	swap(&x,&y);
	printf("实参:x=%d,y=%d\n",x,y);
}

在IDE中,两个函数运行结果分别如下如下:
传值传递的结果
传址传递的函数结果
所以,传值传递方式,在swap函数里形参x和y的数值被交换了,但是主函数中,实参x和y函数值却没有变化,因为在数据传递的过程中,只是实参的函数值被复制了一份给形参。而形参的数值却不能传递回实参。

嵌套调用

嵌套调用的流程图:
在这里插入图片描述
这张图是网上找的,简单的描述了一下嵌套调用里面各函数之间的关系。如果这里的调用函数都是同一个函数,那就是递归调用了。

  • 递归调用
    递归是函数嵌套的一种特殊形式,只函数直接或间接的嵌套调用其本身,用递归调用解决问题需要注意以下几点:
  • 一个问题可以转化为一个跟它有相同解法的问题
  • 问题处理的对象呈一定规律递增或递减
  • 递归调用一定要有一个函数的出口,也就是要设定结束条件
  • 通常递归函数分为两个部分,一部分处理问题,包括判断递归出口,一部分负责转化为新问题

函数的类型

函数分为带参函数和无参函数,任何参数都要在函数名后面的小括号里声明,如果没有参数也要标上小括号,不然函数名就会被识别为变量标识符。

存在函数体为空的函数,这种函数的存在往往是为了函数的可扩展性,日后可以往其中扩展新的内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值