C++学习笔记(三)
2017-12-04 22:33
253 查看
1. 引用变量
引用是已定义变量的别名,若使用int & x = a;,即将x作为a的引用,其中的&不是地址运算符,而是类型标识符的一部分。事实上,x与a指向的是同一块内存空间,对x进行操作即对a进行操作。必须在声明引用变量时进行初始化。
/* ** 该程序试图通过指针改变引用变量x的指向 ** 体现了引用与指针的区别 */ int a = 100; int *p = &a; //指针p指向a int & x = *p; //x作为*p的引用,即对a的引用 int b = 50; p = &b; //将指针p指向b,试图修改x为b的引用(invalid) cout << "x = " << x << endl;
该程序最终输出为
x = 100。
可见,一旦将x初始化为*p,也就是使x指向a,再接下来即使将指针p指向b,也不能改变x已经是a的引用的事实。
2.引用在函数中的易错点
//error const string & func(string & s1, const string & s2) { string temp; temp = s2 + s1 + s2; return temp; }
该程序存在一个致命缺陷,就是返回了一个指向函数func中声明的变量的引用。因为在函数结束后会释放函数中申请的内存空间,而返回值却指向了某块已经被释放的内存,会造成程序出错。
应修改为:
//right string func(string & s1, const string & s2) { string temp; temp = s2 + s1 + s2; return temp; }
3.何时使用引用参数
1)使用引用参数的原因:
a.修改调用函数中的数据 b.通过传递引用而不是整个数据对象,以提高程序的运行效率
2)如何选择:
a.如果数据对象是数组,则只能使用指针; b.如果数据对象是结构,则使用引用或指针; c.如果数据对象是类,则使用引用; d.如果数据对象很小,如内置类型或小型结构,则使用按值传递......
4.默认参数
默认参数是指当函数调用中省略了实参时,自动使用的一个值。使用方式:
int func(const char * str, int n = 1);
在调用函数时,若使用
func(str, 5),则是正常的函数调用,将func函数中的n赋值为5;若是在调用函数时使用
func(str),则会将n初始化为1,即在函数func中,n的值将为1,即使在函数中不对n进行赋值操作。
值得注意的是,在给参数列表添加默认值时,必须给所添加参数的右侧所有的参数都添加默认值。
int f(int a, int b = 1, int c = 2); //valid int f(int a, int b = 1, int c); //invalid int f(int a = 3, int b = 1, int c = 2); //valid
在调用函数时,实参必须按从左到右的顺序一次赋值给相应的形参,不能跳过任何参数。
下面几种调用方式:
f(10, , 12); //invalid f(10); //valid f(10, 11); //valid
默认值必须通过函数原型设置:
#include <iostream> using namespace std; char * left(const char * str, int n = 1); //在该位置设置默认值 int main() { char str[10]; cout << "Enter a string : \n"; cin.get(str, 10); char *a = left(str, 4); //传参 n = 4 cout << a << endl; delete [] a; //释放之前的数组 a = left(str); //不传参,使用默认参数 n = 1 cout << a << endl; delete [] a; return 0; } char * left(const char * str, int n) { //此处不可写为 int n = 1 if(n < 0) n = 0; char *p = new char[n+1]; int i; for(i = 0 ; i < n && str[i]; i++) p[i] = str[i]; while(i < n) p[i++] = 0; return p; }
相关文章推荐
- C++学习笔记(第四章 函数的应用 递归函数 之四)
- C++学习笔记之---中交换函数的几种写法与辨析
- C++学习笔记(第六章 初识指针 及 指针与数组 之一)
- C++学习笔记60——模板编译模型
- Effective C++ 学习笔记(五)
- The C++ Programming Language 学习笔记 第7章 函数
- C++ FAQ学习笔记 23章 继承 — 你所不知道的
- C++ STL--map映照容器学习笔记
- Effective C++ 学习笔记(二)
- C++学习笔记6——string
- <C++学习笔记>iterator C++
- C++学习笔记20 多态与继承下
- C++ TEMPLATE 学习笔记
- C++学习笔记 4th —— 万能流程控制if语句
- C++学习笔记之零碎知识点(一)
- C++学习笔记(一)const与define
- C++ 学习笔记
- c++学习笔记(十):运算符重载综合——自定义数组类
- 【学习笔记】C++高级程序设计:STL标准模板库(2)
- C++ 学习笔记(2)