第一周 从C走进C++ 004 引用

1. 引用的概念
  下面的写法定义了一个引用,并将其初始化为引用某个变量。
    类型名 & 引用名 = 某变量名;

int n = 4;
int & r = n; // r引用了 n, r的类型是 int &

   某个变量的引用,等价于这个变量,相当于该变量的一个别名。

int n = 4;
int & r = n;
r = 4;
cout << r;  //输出4
cout << n; //输出4
n = 5;
cout << r;  //输出5 

  定义引用时一定要将其初始化成引用某个变量。
  初始化后,它就一直引用该变量,不会再引用别的变量了。
  引用只能引用变量,不能引用常量和表达式。

double a = 4, b = 5;
double & r1 = a;
double & r2 = r1;    // r2也引用a
r2 = 10;
cout << a << endl;  // 输出10
r1 = b;              // r1并没有引用b
cout << a << endl;  //输出5

2. 引用应用的简单示例

  • C语言中,如何编写交换两个整型变量值的函数?
void swap( int * a, int * b)
{
  int tmp;
  tmp = * a; * a = * b; * b = tmp;
}
int n1, n2;
swap(& n1,& n2) ; // n1,n2的值被交换
  • 有了C++的引用:
void swap( int & a, int & b)
{
    int tmp;
    tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1,n2) ; // n1,n2的值被交换

3. 引用作为函数的返回值(教材第63页)

int n = 4;
int & SetValue() { return n; }
int main()
{
    SetValue() = 40;
    cout << n;
    return 0;
} //输出: 40

4. 常引用
  定义引用时,前面加const关键字,即为“常引用”

int n;
const int & r = n; 

  r 的类型是 const int &

  • 不能通过常引用去修改其引用的内容:
int n = 100;
const int & r = n;
r = 200; //编译错
n = 300; // 没问题
  • const T & 和T & 是不同的类型!!!

  T & 类型的引用或T类型的变量可以用来初始化const T & 类型的引用。
  const T 类型的常变量和const T & 类型的引用则不能用来初始化T &类型的引用,除非进行强制类型转换。

5. QUIZ 1

下面程序片段哪个没错?

A)

 int n = 4;
 int & r = n * 5;

B)

int n = 6;
const int & r = n;r = 7;

C)

int n = 8;
const int & r1 = n;
int & r2 = r1;

D)

int n = 8;
int & r1 = n;
const int r2 = r1;

6. QUIZ 2

下面程序片段输出结果是什么?

int a = 1,b = 2;
int & r = a;
r = b;
r = 7;
cout << a << endl; 

A) 1

B) 2

C) 7

第一周 从C走进C++ 004 引用

时间: 2024-10-08 17:44:03

第一周 从C走进C++ 004 引用的相关文章

第一周 从C走进C++ 005 const

1.  定义常量 const int MAX_VAL = 23; const string NAME = "Micael Jordan"; 2. 定义常量指针 不可通过常量指针修改其指向的内容 int n,m; const int * p = & n; * p = 5; //编译出错 n = 4; //ok p = &m; //ok, 常量指针的指向可以变化 不能把常量指针赋值给非常量指针,反过来可以 const int * p1; int * p2; p1 = p2;

第一周 从C走进C++ 001 函数指针

1. 基本概念: 程序运行期间,每个函数都会占用一段连续的内存空间.而函数名就是该函数所占内存区域的起始地址(也称“入口地址”).我们可以将函数的入口地址赋给一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以调用这个函数.这种指向函数的指针变量称为“函数指针”. 2. 定义形式 类型名 (* 指针变量名)(参数类型1, 参数类型2,…); 例如: int (*pf)(int ,char); 表示pf是一个函数指针,它所指向的函数,返回值类型应是int,该函数应有两个参数,第一个是int

第一周 从C走进C++ 003 位运算

1. 基本概念 位运算: 用于对整数类型(int,char, long 等)变量中的 某一位(bit),或者若干位进行操作. 比如: 1) 判断某一位是否为1 2) 只改变其中某一位,而保持其他位都不变. C/C++语言提供了六种位运算符来进行位运算操作: &   按位与(双目) |    按位或(双目) ^   按位异或(双目) ~   按位非(取反)(单目) << 左移(双目) >> 右移(双目) 2. 按位与 “&” 将参与运算的两操作数各对应的二进制位进行与

第一周 从C走进C++ 002 命令行参数

1. 命令行参数 int main(int argc, char * argv[]) { …… } argc: 代表启动程序时,命令行参数的个数.C/C++语言规定,可执行程序程序本身的文件名,也算一个命令行参数,因此,argc的值至少是1. argv: 指针数组,其中的每个元素都是一个char* 类型的指针,该指针指向一个字符串,这个字符串里就存放着命令行参数. 例如,argv[0]指向的字符串就是第一个命令行参数,即可执行程序的文件名,argv[1]指向第二个命令行参数,argv[2]指向第

第一周 从C走进C++ 006 动态内存分配

1. 用new 运算符实现动态内存分配 第一种用法,分配一个变量: P = new T; T是任意类型名,P是类型为T * 的指针. 动态分配出一片大小为 sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P.比如: int * pn; pn = new int; * pn = 5; 第二种用法,分配一个数组: P = new T[N]; T :任意类型名 P :类型为T * 的指针 N :要分配的数组元素的个数,可以是整型表达式 动态分配出一片大小为 sizeof(T)字节的内

第一周 从C走进C++ 007 内联函数和重载函数

1. 内联函数? 函数调用是有时间开销的.如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下调用函数所产生的这个开销就会显得比较大.? 为了减少函数调用的开销,引入了内联函数机制.编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句. inline int Max(int a,int b) { if( a > b) return a; return b; } 2. 函数重载? 一个或多个函数,名字相同,然而参数个数或参数类型不相同,

第一周 从C走进C++ 008 函数缺省参数

1. 函数的缺省参数? C++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值. void func( int x1, int x2 = 2, int x3 = 3) { } func(10 ) ; //等效于func(10,2,3) func(10,8) ; //等效于func(10,8,3) func(10, , 8) ; //不行,只能最右边的连续若干个参数缺省 ? 函数参数可缺省的目的在于提高程序的可扩充性.? 即如果某个写好

20145321曾子誉《Java程序设计》第一周学习总结

20145321 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 1.三大平台:Java SE.Java EE .Java ME 2.Java SE:由JVM.JRE.JDK.Java语言四部分组成. JVM:操作系统,虚拟机. JRE:执行环境,包括JVM. JDK:包含JRE及开发过程中需要的一些工具程序. 3.JCP.JSR.RI.TCK的关系:任何想要提议加入Java的功能或特性,必须以JSR正式文件的方式提交,经过JCP这个国际组织投票通过,成为最终文件,由此做出的参考

【笔记】与Android酱的第一周

这周初识了Android酱 啊~AS界面好帅! AS是周四才装的,所以第一周只有半周啦. Android练习:主角是 LinearLayout 新建的工程空空的: manifests:配置文件. java:当然是放java的啦. res:放一些静态资源,包括应用的布局.图片.文字之类的. 进入:res\layout\activity_display_message.xml 开始画界面! 我们的主角LinearLayout译作线性布局,六大布局之一.屏幕是二维的平面,所以LinearLayout有