C++之初识函数(蛮详细的)

C++之初识函数(蛮详细的),第1张

文章目录
    • 4 函数
      • 4.1 概述
      • 4.2 函数的定义
      • 4.3 函数的调用
      • 4.4 值传递
      • 4.5 函数的常见样式
      • 4.6 函数的声明
      • 4.7 函数的分文件编写

4 函数 4.1 概述

作用: 将一段经常使用的代码封装起来,减少重复代码;一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。

4.2 函数的定义

函数的定义一般分为5个步骤:

  1. 返回值类型
  2. 函数名
  3. 参数列表
  4. 函数体语句
  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=10

a=10 b=20

说明: 值传递时,如果形参发生改变,不会影响实参

先讲讲局部变量和全局变量(这里先过个眼熟,后期详细讲):

  1. 局部变量: 一般来说,在一个函数内部声明的变量为局部变量,其作用域只在本函数范围内。

    也就是说,局部变量只能在定义它的函数体内部使用,而不能在其它函数内使用这个变量。

    • 在不同的函数中可声明具有相同变量名的局部变量;
    • 形参也是局部变量,其作用域在定义它的函数内。

      所以形参和该函数体内的变量是不能重名的。

  2. 全局变量: 在文件作用域中声明的变量称为全局变量,全局变量在声明后可以被很多函数使用。

    • 全局变量的作用域是从声明该变量的位置开始直到程序结束处;
    • 如果想在声明全局变量的前面使用该变量,而不需要重新声明,就必需使用extern关键字对其加以说明。

值传递理解:

函数中的变量为局部变量,属于函数私有,跟main函数中的变量没有半毛钱关系

4.5 函数的常见样式

常见的函数样式有4种

  1. 无参无返
  2. 有参无返
  3. 无参有返
  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;
}

运行结果:

无参无返
有参无返,且参数值为100
无参有返
200
有参有返
300

4.6 函数的声明

作用: 告诉编译器函数名称以及如何调用函数。

函数的实际主体可以单独定义。

函数的声明可以多次,但是函数的定义只能有一次

例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.7 函数的分文件编写

函数的分文件编写一般有4个步骤

  1. 创建后缀名为.h的头文件
  2. 创建后缀名.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义

注意< >与“ ”区别:

include
代表编译时直接在系统设置指定的路径中寻找里面是否有test.h的库文件。

如果有,直接加载;如果没有,报错(无法找到库文件)。


include “test.h”
代表编译时先寻找你正在编辑的源代码文件(C或CPP文件)所在的文件夹里面有没有test.h的库文件。

如果有,优先加载这个文件,如果没有,直接在系统设置指定的路径中寻找里面是否有test.h的库文件。

如果有,直接加载;如果没有,报错(无法找到库文件)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/662433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-18
下一篇 2022-04-18

发表评论

登录后才能评论

评论列表(0条)

保存