- 4 函数
- 4.1 概述
- 4.2 函数的定义
- 4.3 函数的调用
- 4.4 值传递
- 4.5 函数的常见样式
- 4.6 函数的声明
- 4.7 函数的分文件编写
作用: 将一段经常使用的代码封装起来,减少重复代码;一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。
函数的定义一般分为5个步骤:
- 返回值类型
- 函数名
- 参数列表
- 函数体语句
- return表达式
语法:
返回值类型 函数名(参数列表){
函数体语句
return表达式
}
4.3 函数的调用
功能: 使用定义好的函数
语法:
函数名(参数)
例1(加法函数)
//函数定义
int add(int a, int b) {//a、b为形参
int sum = a + b;
return sum;
}
int main() {
//main函数调用add函数,这里的a、b为实参
int a = 10;
int b = 20;
//函数调用语法:函数名称(参数)
//当调用函数时,实参的值会传递给形参
int sum = add(a, b);
//输出
cout << "sum=" << sum << endl;
return 0;
}
运行结果:
sum=30
函数的返回值机制:
4.4 值传递- 值传递指函数调用时实参将数值传入给形参
- 值传递时,如果形参发生改变,不会影响实参
例2(值传递)
//如果函数不需要返回值,声明的时候可以写void
//return:返回值不需要时,可以不写return
void swap(int a, int b) {
int temp = 0;
temp = a;
a = b;
b = temp;
cout << "交换后:" << endl;
cout << "a=" << a << " b=" << b << endl;
}
int main() {
int a = 10;
int b = 20;
cout << "交换前:" << endl;
cout << "a=" << a << " b=" << b << endl;
//调用函数,值传递时,如果形参发生改变,不会影响实参
swap(a, b);
cout << endl;
cout<< "a=" << a << " b=" << b << endl;
}
运行结果:
交换前:
a=10 b=20
交换后:
a=20 b=10a=10 b=20
说明: 值传递时,如果形参发生改变,不会影响实参
先讲讲局部变量和全局变量(这里先过个眼熟,后期详细讲):
- 局部变量: 一般来说,在一个函数内部声明的变量为局部变量,其作用域只在本函数范围内。
也就是说,局部变量只能在定义它的函数体内部使用,而不能在其它函数内使用这个变量。
- 在不同的函数中可声明具有相同变量名的局部变量;
- 形参也是局部变量,其作用域在定义它的函数内。
所以形参和该函数体内的变量是不能重名的。
- 全局变量: 在文件作用域中声明的变量称为全局变量,全局变量在声明后可以被很多函数使用。
- 全局变量的作用域是从声明该变量的位置开始直到程序结束处;
- 如果想在声明全局变量的前面使用该变量,而不需要重新声明,就必需使用extern关键字对其加以说明。
值传递理解:
4.5 函数的常见样式函数中的变量为局部变量,属于函数私有,跟main函数中的变量没有半毛钱关系
常见的函数样式有4种
- 无参无返
- 有参无返
- 无参有返
- 有参有返
例3(函数的常见样式)
//函数的常见样式
//1、无参无返
void test01() {
cout << "无参无返" << endl;
}
//2、有参无返
void test02(int a) {
cout << "有参无返,且参数值为" << a << endl;
}
//3、无参有返
int test03() {
cout << "无参有返" << endl;
return 200;
}
//4、有参有返
int test04(int a) {
cout << "有参有返" << endl;
return a;
}
int main() {
//1、无参无返
test01();
//2、有参无返
test02(100);
//3、无参有返
cout << test03() << endl;
//4、有参有返
cout << test04(300) << endl;
return 0;
}
4.6 函数的声明运行结果:
无参无返
有参无返,且参数值为100
无参有返
200
有参有返
300
作用: 告诉编译器函数名称以及如何调用函数。
函数的实际主体可以单独定义。
函数的声明可以多次,但是函数的定义只能有一次
例4(函数的声明)
//函数的声明
//比较函数,实现两个整型数字进行比较,返回较大的值
//函数声明
int max(int a, int b);
int main() {
int a = 10;
int b = 20;
cout << max(10, 20) << endl;
}
//函数定义
int max(int a, int b) {
return a > b ? a : b;
}
运行结果:
20
注意: 一般来说,如果函数的定义在main函数后面,会造成编译器找不到该标识符,因为程序的执行是从上往下的。
如果不想写函数声明,就把函数定义写在main函数前面就行了。
函数的分文件编写一般有4个步骤
- 创建后缀名为.h的头文件
- 创建后缀名.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
注意< >与“ ”区别:
include
代表编译时直接在系统设置指定的路径中寻找里面是否有test.h的库文件。如果有,直接加载;如果没有,报错(无法找到库文件)。
include “test.h”
代表编译时先寻找你正在编辑的源代码文件(C或CPP文件)所在的文件夹里面有没有test.h的库文件。如果有,优先加载这个文件,如果没有,直接在系统设置指定的路径中寻找里面是否有test.h的库文件。
如果有,直接加载;如果没有,报错(无法找到库文件)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)