C++学习笔记 1:函数
来源:互联网 发布:淘宝申请退款几天 编辑:程序博客网 时间:2024/06/06 05:43
一些碎碎念~
大一学的C++,大二用得多一点,然后就荒废了,现在想想,大学学的很多东西都学得很表面,学校教得不深入,自己也没有有意识地去深入自学。现在大四了,终于下定决心以后当个程序媛,还有三年的时间充实自己,慢慢来。
C++学习笔记这个系列是看《C++ Primer Plus》第六版这本书做的笔记,实验室一位大神师兄赐给我的书哈哈哈O(∩_∩)O~感恩呐
只是记了一些我自己不太熟的知识点,所以并不是很系统的C++知识点笔记
正题开始~
1. 函数的基本知识
1.1 有返回值的函数(返回类型记为typeName),其返回结果的类型必须为typeName或者可以转换为typeName(例如:如果声明的返回类型为double,而函数返回一个int值,则int值被强制转换成double类型)
1.2 函数的返回类型不能是数组,但是数组可以作为结构或者对象的组成部分返回。
1.3 函数通过将返回值复制到指定的CPU寄存器或者内存单元来将其返回,随后,调用程序将查看该内存单元。
1.4 函数原型提供了函数到编译器的接口,它将函数返回值的类型以及参数的类型和数量告诉编译器。
1.5 函数原型的参数列表中可以不包括变量名,变量名相当于占位符,因此不必与函数定义中的变量名相同。
1.6 编译器可以将函数参数进行主动类型转换(某些可以)。
2. 函数和数组
2.1 将数组作为函数参数
int sum_arr(int arr[],int n)int sum_arr(int* arr,int n)
将数组第一个元素的地址传递进去,没有创建数组的副本,操作的是原来的数组。
2.2 用const保护数组
void show_array(const double arr[],int len)
2.3 使用数组区间的函数
int arr_sum(const int* begin,const int* end);
2.4 指针和const
禁止将const值的地址赋给非const指针
如果涉及的是一级间接关系,则将非const指针赋给const指针是可以的。
int age = 19;int* pd = &age;const int* pt = pd;
const int** pp2;int* p1;const int age = 19;pp2 = &age;*pp2 = p1;*p1 = 10;
int sloth = 3;const int* p1 = &sloth;int* const p2 = &sloth;
下面的代码有两种sum函数声明,int (*ar2)[4]是一个指针,指向由四个int组成的一个数组
int sum(int (*ar2)[4],int size);int sum(int ar2[][4],int size);int data = {{1,2,3,4},{5,6,7,8},{9,0,1,2}};int total = sum(data,3);
3. 递归
3.1 每个递归调用都创建自己的一套变量4. 函数指针
4.1 函数的地址:存储函数的机器语言代码的内存的开始地址。4.2 获取函数的地址:只要使用函数名即可,如果think()是一个函数,则think就是它的地址。
4.3 声明函数指针:下面的代码中pf是一个指向返回类型为double,参数类型为int的函数的指针
double pam(int); //prototypedouble (*pf) (int);pf = pm;
double pam(int);double (*pf) (int);pf = pm;double x = pam(4);double y = (*pf)(4);doubel z = pf(4); //also allowed in C++
const double * f1(const double *, int);const double * f2(const double [],int);const double * f3(const double ar[],int);condt double (*p1) (const double *, int) = f1; //p1为指向函数f1的指针auto p2 = f2; //p2为指向函数f2的指针const double * (*pa[3])(const double *,int) = {f1,f2,f3}; //pa是一个包含三个指针的数组,其中每个指针都是函数指针([]的运算优先级高于*)auto pb = pa; //auto声明只能用于单值初始换,不能用于初始化列表const double av[3];const double px = pa[0](av,3);const double py = (*pb[1])(av,3);auto pc = &pa; //指向整个函数指针数组的指针const double * (*(*pd)[3])(const double *,int) = &pa; //pd为指向整个函数指针数组的指针
typedef const double * (*p_fun)(const double *, int);p_fun p1 = f1;p_fun pa[3] = {f1,f2,f3};p_fun (*pd)[3] = &pa;
- C++:函数<学习笔记>
- 学习笔记1-C++-strcat,strcpy函数
- C学习笔记之函数
- C/C学习笔记/函数与程序结构
- C语言学习笔记(1)--基本概念和函数用法
- c++Primer学习笔记(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:函数指针
- C++primer学习笔记之函数
- CentOS上安装Git并实现提交自动同步到网站目录
- java多线程-synchronized关键字详解
- Unity数据的存储
- 深入理解margin属性
- WordPress静态缓存插件WP Super Cache的使用方法
- C++学习笔记 1:函数
- java多线程-同步函数与同步代码块的区别
- OpenCV 学习记录6 视频读取人像并对脸部调色
- 1334 sdut
- 2017已来,最全面试总结——这些Android面试题你一定需要
- codeforces 698A Vacations 基础dp
- ububtu16.04系统clang & llvm & libc++配置
- 170428 汇编-int指令
- 僵尸进程与孤儿进程解析