C语言——函数


维基百科中对函数的定义:子程序

  • 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性
  • 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库

C语言中,函数分为:

  1. 库函数
  2. 自定义函数

C语言的基础库里提供了一系列的库函数,这些库函数可以实现一些常用到的基础功能,方便程序员进行开发

这篇博客主要来了解一下自定义函数

参数

实际参数(实参)

实参就是真实传给函数的参数

在进行函数调用时,实参必须有确定的值,以便把这些值传送给形参

形式参数(形参)

形参是指函数名后括号中的变量

形式参数只有在函数调用的过程中才实例化(分配内存单元),当函数调用完之后就自动销毁了,也就是说形式参数只在函数中有效

借一个例子分析

void swap1(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}

void swap2(int* px, int* py)
{
	int tmp = 0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}

int main()
{
	int num1 = 1;
	int num2 = 2;
	swap1(num1, num2);
	printf("swap1:\nnum1 = %d num2 = %d\n", num1, num2);
	swap2(&num1, &num2);
	printf("swap2:\nnum1 = %d num2 = %d\n", num1, num2);
	return 0;
}

swap1 中的参数 x 、y 和 swap2 中的参数 px、py 是形式参数

在 main 函数中传给 swap1 的 num1、num2 和传给 swap2 的 &num1 、&num2 是实际参数
在这里插入图片描述
在这里插入图片描述

通过地址我们可看出,swap1 函数在调用的时候,参数 x、y 拥有自己的空间,同时拥有了和实参一样的内容

可以认为形参实例化之后相当于实参的一份拷贝

swap2 函数在调用的时候,参数px、py 也拥有自己的空间,但空间中储存的是num1、num2的地址

调用

传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参

传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式

这种传参方式可以让函数和函数外边的变量建立起正真的联系

函数内部可以直接操作函数外部的变量

刚才的例子 swap1 函数的调用是传值调用,swap2 函数的调用是传址调用

嵌套调用

函数内部还可以调用函数(调用自身函数或者其它函数都可以)

链式访问

把一个函数的返回值作为另外一个函数的参数

声明和定义

声明

告诉编译器有一个函数叫什么,参数是什么,返回类型是什么
但是不关心函数具体是否存在

函数的声明要满足先声明后使用,一般出现在函数的使用之前或放在头文件中

定义

指函数的具体实现,交待函数的功能实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值