C++学习笔记7 - 函数
来源:互联网 发布:sql语句分组统计 编辑:程序博客网 时间:2024/06/05 02:46
《C++ Primer Plus 第6版》读书笔记
知识点:
1.函数的返回值不能是数组,可以是其他任何类型
2.
const int ArSize = 8;int cookies[ArSize] = { 1, 2, 3, 4, 5, 6, 7, 8 };//sizeof cookies = 32int sum_arr(int arr[], int n){int total = 0;for (int i = 0; i < n;i++){total = total + arr[i];} //sizeof arr = 4 指针的长度return total;}
对数组使用sizeof返回整个数组的长度
数组使用&返回整个数组的地址
4.仅当函数头或函数原型中时,int arr[] 与 int *arr 含义相同
5.恒等式
arr[i] == *(ar + i); //是值
&arr[i] == ar + i;// 是地址
6.指针加1,实际上是加上了一个与指针指向的类型的长度(以字节为单位)相等的值
7. 构思程序时将存储属性与操作结合起来,便是超OOP思想迈进了重要的一步
8.指向常量的指针
int age = 10;
const int *p = &age;
不能通过 p 修改age.但age = 11允许自己改变,p可以指向另一个值
9.常量可以赋值给常量指针,但常量不能赋值给常规指针
const int age = 10;
const int *p = &age; //OK
const int age1 = 10;
int *p = &age1; //INVALID, 冲突,const变得荒谬
10.const 指针不能赋值给非const指针
11.const int age = 10;
int * const p = &age; //不能修改p的指向的地址
12.int fun(const int arr[], int len) // 不能修改数组中的值,只有一层间接关系可以使用这种技术,如果数组元素
为指针或指针的指针则不能使用const
13.二维数组形参
int data[3][4] = {{1,2,3,4},{5,6,7,8},{6,6,7,8}};
int total = sun(data, 3);
data是数组名,该数组有3个元素,第一个元素本身是一个数组,有4个int值组成。
因此data类型是指向由4个int组成的数组的指针。
函数原型为:int sum(int (*arr2)[4], int len); 括号必不可少,
int *arr2[4] 含义为4个指向int的指针组成的数组
int (*arr2)[4] 含义为指向4个int数组的指针
另一种函数原型:int sum(int arr2[][4], int len);
14.函数中使用二维数组
ar2[r][c] == *(*(ar2 + r) + c);
15.递归
16.
#include "stdafx.h"#include "iostream"void countdown(int n);int _tmain(int argc, _TCHAR* argv[]){using namespace std;countdown(4);return 0;}void countdown(int n){using namespace std;cout << "Count Down :" << n << endl; //前5次都能执行到这,然后if完返回if (n>0) //终止递归的条件,必须有{countdown(n - 1); }cout << n << ": Kabamm" << endl;}
输出结果:
Count Down :4Count Down :3
Count Down :2
Count Down :1
Count Down :0
0: Kabamm
1: Kabamm
2: Kabamm
3: Kabamm
4: Kabamm
请按任意键继续. . .
17.函数指针
double pam(int)
double (*pa)(int)
pam是函数 (*pa)是函数 pa是函数指针
double (*pa)(int) //函数指针
double *pa(int) //返回指针的函数
18.
const double * (*pl)(const double *, int) = fl;
auto p2 = f2 //等同上面
(*pl)(av,3) == p2(va,3) //可以省略*
19.三个函数指针的数组
const double * (*pa[3])(const double *, int ) = {fl, bl, cl};
auto pb = pa; //等同上面
包含三个指针的数组,指针类型为函数指针
const double * px = pa[0](av, 3);
const double * pz = (*pa[1])(av, 3);
//两种写法等效
const double a = *pa[0](av, 3);
const double b= *(*pa[1])(av, 3);
//返回的是值,两种写法等效
20.
(*pd)[3] //pd是个指针 它指向一个包含三个元素的数组,这些元素是什么呢? 由pa的声明的其他部分描述
21.
pa和&pa[0] 的值相同,都是数组第一个元素的地址
pa 代表第一个元素的地址, pa +1 表示第二个元素
&pa 代表整个数组的首地址 ,&pa + 1 12个字节内存块的地址
要得到第一个元素:
**&pa == *pa == pa[0]
22.
typedef const double * (*p_fun)(const double *, int);
p_fun p1 = f1;
p_fun pa[3] = {f1, f2, f3};
p_fun (*pd)[3] = &pa;
//typedef 减少输入,编程不易犯错 ,让程序更容易理解
- C++:函数<学习笔记>
- c++Primer学习笔记(7)--函数
- C++Primer学习笔记(7)函数
- C学习笔记之函数
- C/C学习笔记/函数与程序结构
- C++Primer学习笔记第七章(7/18)函数
- 嵌入式linux c 学习笔记7-函数调用
- C++Template学习笔记之函数模板
- C++pirmer 学习笔记之函数定义
- C语言学习笔记(九)--函数
- 《C和指针》学习笔记四/函数/
- IOS学习笔记06---C语言函数
- Object-C 学习笔记(三)---函数function
- 【C语言学习笔记】qsort函数总结
- c++primer学习笔记5 - 函数
- C和指针 学习笔记-4.函数
- C/C++学习笔记10:内联函数
- C/C++学习笔记17:函数指针
- CMOS Sensor 基础知识
- 如何度过职业生涯?
- 关系型数据库到HBase的数据储存方式变迁
- 物料确定功能实现
- Java for Web学习笔记(一):Java EE的介绍
- C++学习笔记7 - 函数
- android GridView选择照片的完整实现
- 关于iPhone手机如何导入本地音乐
- A卡驱动的故障分析
- struts2自定义拦截器
- VxLAN网络组播优化
- cmake使用示例
- 最全面 Nginx 入门教程 + 常用配置解析
- 如何使用UIAutomation进行iOS 自动化测试