函数
1.函数是什么
函数就是在c语言当中对一段代码的封装,它负责完成某项特定的任务,具备相对的独立性,一个函数一般会有输入的参数和函数的返回值,提供对过程的封装和细节的隐藏。
2.c语言中函数的分类
1.库函数
库函数的存在意义用四字总结:提高效率!
例如:
1.在编程中将信息按照一定的格式打印在屏幕上(printf)
2.在编程中我们做字符串拷贝工作(strcpy)
3.计算n的k次方(pow)
像以上的这些例子,都属于我们在编程过程中的基础功能,在开发过程中几乎每个程序员都会用到,这样为了提高编程的效率,所以在c语言中提供了一系列的库函数大大提高了程序员的编程效率。
2.自定义函数
除过库函数之外c语言中的库函数还包括自定义函数,顾名思义就是自己定义编写的函数,那为什么已经有库函数了还要有自定义函数呢?
c语言当中的库函数是为了提高编程效率,适用于普罗大众、而自定义函数才是根据自己编程过程中解决实际问题而定义的一些列函数,因此我们要更加注重的是自定义函数。
3.函数的定义
自定义函数与库函数一样具有返回值类型、参数、函数名,不一样的是函数具体的功能是程序员自己设计的,这样就提高了编程的多样性,为程序员提供了很大的发挥空间。
函数的组成:
函数类型 函数名(参数)
{
语句项;
}
注意:
1.定义函数时如果不写清楚返回值类型默认返回值类型时整形,只有void修饰函数返回值类型时才代表函数不需要返回值类型。
2.函数名在定义时应当注重见名知意。
2.函数的参数放在函数名后的小括号当中,函数的语句项放在一对花括号当中。
举个例子:
自定义一个函数用来计算俩数和
int Sum(int a, int b)//函数返回值类型是 int 函数名是Sum 参数是a,b也就是要参与计算的两个数
{
return a + b;//语句项只有一句,就是返回a+b的结果,因为a,b都是整形所以返回的也是整形,符合定义时的返回值要求。
}
4.函数的参数
函数的参数十分重要,拉出来单独说一说,函数的参数包含两个:
1.形式参数
形式参数就是指函数名后括号当中的变量,因为形式参数在函数调用的时候才会发生实例化(分配内存单元),所以叫形式参数,形式参数在函数调用完毕后自动销毁,因此函数的形式参数只在函数内部有效。
2.实际参数
真实传给函数的参数,实际参数可以是:常量、变量、表达、函数等。无论函数的实际参数是何种类型的量,在进行函数调用的时候都必须有确定的值,以便于将这些值拷贝给形参。
3.几点注意:
函数调用形参实例化是自右向左进行实例化的。
形参在实例化之后实际上相当于实参的一份临时拷贝,在形参实例化的过程中一定会形成临时拷贝。
5.函数的调用
1.传值调用:函数的形参和实参分别占据不同的内存块,传值传参对形参的修改不会影响实际参数本身。
例子:
#include<stdio.h>
#include<Windows.h>
void test(int a)
{
a++;
printf("在函数中a=%d\n", a);
}
int main()
{
int a = 10;
test(a);
printf("在函数外a=%d", a);
system("pause");
return 0;
}
运行结果:
从这个例子当中可以看出传值传参对形参的影响不会影响到函数外部的实际参数。
2.传址传参:传址传参是将函数外部的实参的内存地址传递给函数的形参的一种调用方式,这种方式可以使函数在内部直接操作函数外部的变量。
注意:不论是传值传参还是传址传参都会形成临时变量。
例子:
#include<stdio.h>
#include<Windows.h>
void test(int *px,int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
test(&num1, &num2);
printf("num1:%d num2:%d\n",num1,num2);
system("pause");
return 0;
}
运行结果:
结果显示在函数内部交换之后,函数外部也发生了交换。
6.函数的定义和声明
1.函数的声明:
告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是
例如:
int test(int a);//这就是一个函数的声明,表明函数名:test,函数返回值:int,函数参数:a
函数的一般放在函数的调用之前,满足先声明后调用。
函数的声明一般放在头文件当中。
在头文件当中的开头可以加上:#pragma once防止头文件重复被包含
2.函数的定义
函数的定义指的是函数功能的具体实现。