第三章知识点整理

第三章知识点整理

函数
1)分类
函数分类
从用户使用的角度看,函数有两种:
(1)系统函数,即库函数。
(2)用户自己定义的函数。
从函数的形式看,函数分两类:
(1)无参函数。调用函数时不必给出参数。
(2)有参函数。在调用函数时,要给出参数。在主调函数
和被调用函数之间有数据传递。

一.函数的定义和调用

main就是一个函数,它是C++程序的主函数。一个C++程序可以由一个主函数和若干子函数组成。主函数是程序执行的开始点。由主函数调用子函数,子函数还可以再调用其它子函数。

调用其它函数的函数称为主调函数。被其他函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被其它函数调用。

1.函数的定义

1.1函数定义的语法形式

类型说明符   函数名(含类型说明的形式参数表)

{

语句序列

}

1.2形式参数

类型标识符1   形参名1,类型标识符2   形参名2,···,类型标识符n   形参名n

形参的作用是实现主调函数与被调函数之间的联系。通常将函数所处理的数据、影响函数功能的因素或者函数的处理结果作为形参。

如果一个函数的形参表为空,则表示它没有任何形参。main函数可以没有形参,也可以有形参,其形参也称命令行参数,由操作系统在启动程序时初始化。

函数在没有被调用时是静止的,此时的形参只是一个符号,它标志着在形参出现的位置应该有一个什么类型的数据。

函数在被调用时才执行,也就是在被调用时才由主调函数将实际参数赋予形参。

1.3函数的返回值和返回值类型

函数可以有一个返回值,函数的返回值是需要返回给主调函数的处理结果。类型说明符规定了函数返回值的类型,函数的返回值由return语句给出,格式如下:

return 表达式;

除了指定函数的返回值外,return语句还有一个作用,就是结束当前函数的执行。

一个函数也可以不讲任何值返回给主调函数,这时它的类型标识符为void,可以不写return语句,但也可以写一个不带表达式的return语句,用于结束当前函数的调用,格式如下:

return;

二.函数的调用

2.1函数的调用形式

变量在使用之前需要首先声明,类似的,函数在调用之前也需要声明。函数的定义就属于函数的声明,因此,在定义了一个函数之后,可以直接调用这个函数。但如果希望在定义一个函数之前调用它,则需要在调用函数之前添加该函数的函数原型声明。函数原型声明的形式如下:

类型说明符   函数名(含类型说明的形参表);

与变量的声明和定义类似,声明一个函数只是将函数的有关信息告诉编译器,此时并不产生任何代码;定义一个函数是除了同样要给出函数的有关信息外,主要是要写出函数的代码。

声明了函数原型之后,便可以按如下形式调用子函数:

函数名(实参列表);

实参列表应该给出与函数原型形参个数相同、类型相符的实参,每个实参都是一个表达式。函数调用可以作为一条语句,这时函数可以没有返回值。函数调用也可以出现在表达式中,这时就必须有一个明确的返回值。

三.函数参数传递
C++函数的三种传递方式为:值传递、指针传递和引用传递

值传递:

void fun(int x){ x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加了程序运行的时间,降低了程序的效率。 } void main(void){ int y = 0; fun(y); cout<<"y = "<<y<<endl; //y = 0; }

指针传递:

void fun(int *x){ *x += 5; //修改的是指针x指向的内存单元值 } void main(void){ int y = 0; fun(&y); cout<<<<"y = "<<y<<endl; //y = 5; }

引用传递:

void fun(int &x){ x += 5; //修改的是x引用的对象值 &x = y; } void main(void){ int y = 0; fun(y); cout<<<<"y = "<<y<<endl; //y = 5; }

1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。

2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。

3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。

猜你喜欢

转载自blog.csdn.net/qq_43563862/article/details/84938011