函数
维基百科对函数的定义为:子程序
- 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram,callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
- 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
c语言中函数的分类:
- 库函数
- 自定义函数
库函数
C语言常用库函数:
- IO函数
- 字符串操作函数
- 字符操作函数
- 内存操作函数
- 时间/日期函数
- 数学函数
- 其他函数
库函数的查询工具:
- www.cplusplus.com
- http://en.cppreference.com
自定义函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数。不同点是我们可以自己进行设计。
函数的组成 :
ret_type fun_name(para1, * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
函数的参数
实际参数(实参):
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形参当函数调用完了之后就自动销毁了。因此形参只有在函数中才有效。
例子:
#include <stdio.h>
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::num1 = %d num2 = %d\n", num1, num2);
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
其中:x,y,px,py 都是形式参数。在main函数中传给Swap1的num1,num2和传给Swap2函数的&num1,&num2是实践参数。
x,y在函数中拥有自己的空间和地址,同时拥有了和实参一模一样的内容。所以形参实例化之后相当于实参的一份临时拷贝。
函数的调用
传值调用:
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
void func(int A,int B){
int temp=0;
temp=A;
A=B;
B=temp;
}
int main(){
int a=1;
int b=2;
func(a,b);
printf("a=%d b=%d",a,b);//打印结果a=1;b=2,没有交换值。
}
传址调用:
- 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
- 这种传参方式可以让函数和函数外边的变量建立起正真的联系,也就是函数内部可以直接操作函数外部的变量。
函数的嵌套
函数和函数之间可以进行嵌套:
#include <stdio.h>
void new_line()
{
printf("hehe\n");
}
void three_line()
{
int i = 0;
for(i=0; i<3; i++)
{
new_line();
}
}
int main(){
three_line();
return 0;
}
小tag:
人人都需要的宏定义
#define mian main
#define ,,
#define : ;
#define flase false
#define ture true
#define ‘ '
#define “ "