C++引用

c++ 引用用法

  • 引用 是c++中一个强有力的语法, 在编程中非常使用;
  • 一般来说,函数的参数作为局部变量,对局部变量的操作不会影响到外部变量,如果想要修改传入的参数,那么只能使用指针。
  • 有没有办法不使用指针,也能修改传入的参数呢? 一个方便的方法是: c++的引用;引用不会产生副本,而是给变量起了一个别名而已。其实是同一个变量。对引用的变量的操作,其实就是对原变量的操作。
  • 引用的使用特别简单: 就是在变量名前,加一个&,即可

在把一个体积较大的结构变量当作函数的参数时, 使用引用方式的好处:
1)不必为实际参数建立副本, 可以节省存储空间;
2) 不需要传递实际参数的值, 可以大大节省传递参数的时间;
3) 如果形式参数是: 指针型引用变量的话,比如: int * &p, 则在函数内部可以将p作为普通的变量使用, 可大大降低程序编写的复杂程度,从而降低程序的出错率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "LinkList.h"

void initList_L(LinkList &first) //c++引用,简单,first的副本,可以改变first ----OK..
{ //初始化单链表,建立只有头结点的空链表;
first = (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点first
first->link = NULL; //置空
}

void initList_L_02(LinkList *first) //测试用c语言指针,不用c++引用,可以改变 ----OK..
{
//初始化单链表,建立只有头结点的空链表;
*first = (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
(*first)->data = 8888;
printf("L_02:set first->data = 8888\n");
(*first)->link = NULL; //置空
}
void initList_L_03(LinkList first) //测试用c语言指针,不用c++引用, c函数参数是传值, ---FAILED.
//要改变first,必须采用LinkList *first。
{
//初始化单链表,建立只有头结点的空链表;
first = (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点,first改变会失败。
first->data = 8888;
printf("L_03:set first->data = 8888\n");
first->link = NULL; //置空
}

测试主程序中,测试:

1
2
3
4
5
6
7
8
9
LinkList L5;
initList_L_02(&L5);
//check L5->data == 8888 ??
printf("the data of L5: %d \n",L5->data);

LinkList L6;
initList_L_03(L6);
//check L6->data == 8888 ??
printf("the data of L6: %d \n",L6->data);

函数initList_L_03(), 无法修改first值; c函数参数默认是传值,要改变first,必须采用LinkList * first。采用c++引用的话, 比较简单。如果采用指针的话,数据访问都要以 ( * first ) -> data的形式,来访问数据。

-------------本文结束感谢您的阅读-------------