c++primer plus 6 读书笔记 第七章 函数--C++的编程模块

第7章 函数--C++的编程模块

7.1 复习函数基本知识

7.1.1 定义函数

无返回值的函数。

void functionName(parameterList)

{

 statement(s)

return; //optional,可写可不写

}

有返回值的函数

扫描二维码关注公众号,回复: 2010222 查看本文章

typyName functionName(parameterList)

{

statement(s)

return value;

}

执行完第一个return结束。

7.1.2 函数原型和函数调用

函数原型描述了函数到编译器的接口。

函数原型的语法:

最简单的做法:复制函数定义中的函数头添加分号。

7.2 函数参数和按值传递

普通的函数调用时传递的是变量值,而不是变量本身。

7.2.1多个参数

多个参数只需要 ,分开即可

注意对应顺序。

7.3函数和数组

7.3.1函数如何使用指针来处理数组

大多数情况下C++将数组名视为指针。

但是也有一些例外。

一般传递数组参数使用 (int array[],int n) 这样的格式

虽然,(int * array, int n)也可。

7.3.2 将数组 作为参数传递,实际上传递了数组的地址值。

也就是说,函数可以(通过地址)修改、使用原始数组的值。

为了防止恶意破坏原始数组,可以用const前缀保护数组(禁止修改)。

E:  void show_array(const double ar[], int n);

7.3.4 使用数组区间的函数

传递两个指针(开头最后)确定数组元素区间(range

7.3.5 指针和const

const和指针有一些微妙之处。

常用的格式:

const int *pt = &age; pt是个指向const int 的指针,意味此值是固定的,无法使用pt修改,但是pt本身是个普通指针,pt的值可以修改(如指向其他变量,pt=&sage;

int * const ps = & sloth;

ps指针是固定的(不可修改),而它指向的元素是普通元素(可以修改)

7.4 函数和二维数组

常用的格式

int sum(int ar2[][4], int size);

7.5函数和C-风格字符串

字符串传递参数都是传递char指针(char*)。

返回字符串是靠返回字符串的地址。当该字符串不再需要时,使用delete[] 释放内存。

7.6函数和结构

7.6.1 传递和返回结构

类似基本类型。

如定义了一个struct time

可以把time当成int一样,

time sum(time t1, time t2);

7.6.3传递结构的地址

传递结构地址(指针),

使用->访问成员。

可以使用const保护

7.7函数和string对象

与结构相似。

7.8函数和array对象

E:声明

void show(std::array<double, 4>  da);

void fill(std::array<double, 4> *pa);

调用:

show(expense);

fill(&expense);

7.9 递归

函数自身可以调用自身。

E:

void recurs(argumentlist)

{

statements1

if(test)

  recurs(arguments)

statements2

}

7.10 函数指针

7.10.1 函数指针的基础知识

1.获取函数地址

函数名即函数地址。

2. 声明函数指针

指定指针指向的类型,参数列表

double pam(int );

double (*pf)(int);

实际上,将函数名换为(*pf)即可声明函数指针。

3. 通过指针调用函数

使用*pf时,看成是函数名即可。也可以不加*

7.10.2

7.10.3深入探讨函数指针

7.10.4 typedef 创建类型别名


猜你喜欢

转载自blog.csdn.net/qq_41068877/article/details/80975377