C++函数学习笔记
来源:互联网 发布:township mac 绿钞 编辑:程序博客网 时间:2024/06/08 08:14
1. 同前所学,内置类型在函数定义未初始化则会变成未定义变量,不可直接使用。而非内置类型(如string)则系统会自动初始化为空字符串。内置类型在函数外定义则系统会走动初始化为其默认值,可以不经过显示初始化直接使用。
2. 函数内定义的变量大多属于自动变量,函数体结束后变量也就随之销毁,若需要变量在函数结束后不销毁,可定义局部静态变量,此变量从第一次初始化知道程序结束才会被销毁,而非函数结束。
如下变量num可以统计该函数被调用了多少次。
int countNum(){ static int num = 0; return ++num;}int _tmain(int argc, _TCHAR* argv[]){ for(int i =0;i!= 10;++i){ cout<<countNum()<<endl; } return 0;}
note:如果局部静态变量没有显式初始化,则系统会默认初始化。
3.函数参数中const的用法也非常值得深入研究。
非常量引用不能接收const对象,也不能接收字面值或者需要类型转换的对象。所以极大的限制了函数的使用范围,故当函数不会改变参数的时候,尽量将参数定义为const型。如下实例:
void example(char c){}void example1(char &c){}void example2(const char &c){}/***************************************************//* **对应字面值实例** */ example('c');//正确,普通的值传递example1('c');//错误,将字面值传递给了普通引用,不能解析example2('c');//正确,字面值传递给了congst引用/***************************************************//* **对应const参数实例** */ const char param= 'c';example(param); //正确example1(param); //错误,const对象传递给了普通非const对象。example2(param); //正确/***************************************************//* **对应类型转换实例** */ void inti1(const int &i){}void inti(int &i){}double b = 3.14;inti(b);//错误,需要类型转换inti1(b);//正确,const参数对需要类型转换的依然适用
4 数组作为函数参数时传递的实际上是数组的手元素的指针,故以下实现正确。
//函数定义void print(int a[]){}//函数调用int i = 10;int a[2]={1,2};print(&i);//正确,实际上函数接收的是int * 类型参数,故满足print(a);//即函数等价于以下void print(int *a){}//以上如果不需要改变数组的值,则需要将参数定义为const类型的。
使用引用能够省去大量数据的拷贝时间,故应该在核实的时候使用引用。
5 函数不应该返回局部变量的引用或者局部变量的指针,因为局部变量在函数调用完成后就会销毁,则引用指向了未知的地方指针也指向了未知的地方,引发错误。
6 可以利用引用返回左值,如primer pge226页返回后成功的修改了数组的特定位的值。但是返回的不能是常量引用,否则就不能作为左值。
0 0
- C++:函数<学习笔记>
- C学习笔记之函数
- C/C学习笔记/函数与程序结构
- 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学习笔记之函数
- 【C++】【学习笔记】【006】函数的重载
- C++Primer学习笔记(7)函数
- Codeforces Round #321 (Div. 2) C. Kefa and Park time limit per test
- Android 提示框的几种类型
- 折线图(三)绘制x轴单位值,以及标识物
- 记住密码功能 angular js实现
- 一步步调试解决iOS内存泄漏
- C++函数学习笔记
- Android跨进程通信----AIDL使用方法
- 编程式使用IoC容器过程
- vim 插件配置
- C++Template
- 怎样实现MindMapper中边框的插入
- 【索引】2015 Multi-University Training Contest
- AndEngine学习之路(一):AndEngine配置
- 复习在ROS机器人系统中打开摄像头,显示图像