Fork me on GitHub

引用

--------siwuxie095

   

   

   

   

   

引用类型:

   

   

引用是什么?

   

在计算机中,引用就是变量的别名

   

   

引申到生活中,引用就像是一个人的外号、小名、昵称,

如:生活大爆炸中 Sheldon 是大名,Shelly 则是昵称,即别名

   

   

1、作为别名来说,能不能只有别名,而没有真实姓名?

2、如果只有别名,怎么对他称呼呢?

3、如果只有别名,是不是就变成了他的真实姓名了呢?

   

可见:只有别名,在生活中也是无法成立的,

在计算机中,如果只有别名,也是没有办法进行命名的

   

   

   

   

引用的不同应用:

   

1、基本数据类型的引用

   

2、结构体类型的引用

   

3、指针类型的引用

   

4、引用作函数参数

   

   

   

   

   

   

基本数据类型的引用:

   

如:

   

   

   

引用必须初始化:如果只起 b 这样一个别名(引用),

后面什么都没有(即没有初始化操作)或 &b=NULL

那么在编译时计算机会报错,因为只有别名是无法成立的

   

如果给 b 赋值 10,a 的值也由原来的 3 变成了 10

即 无论对它的别名做任何操作,其实都是对它本身做操作

就比如:让 Shelly 去做什么事,Sheldon 本身也去做什么事了。

打了 Shelly 实际就是打了 Sheldon,道理都是一样的

别名本身的操作 实体的操作是一样的,等效的

   

   

   

   

   

结构体类型的引用:

   

先定义一个结构体:名字是 Coor 即坐标

   

   

在函数中使用所定义的结构体:

   

   

   

   

先定义结构体变量 c1,并起了一个别名 c,

分别对 c 下的 x 和 y 做赋值操作,即用别名

对相应的成员做操作,打印实体 c1 时 x 和 y

已经变成了 10 和 20

(即操作 c 和 操作 c1 没有任何区别)

   

   

   

   

   

指针类型的引用:

   

写法形式与众不同:

   

   

   

如:

   

   

   

指针 p 指向整型数据 a,然后将 q 当做指针 p 的别名(引用),

q 做相应的操作:把 20 赋值给 *q,相当于把 20 赋值给 *p,

相当于把 20 赋值给 a,a 由原来的 10 变成了 20

   

   

   

   

   

引用作函数参数:

   

先看看 C 语言中的经典程序:交换两个值

   

指针变量作函数形参:

   

   

调用时,要写成取地址的形式:

   

   

   

显然,写法上非常麻烦,理解上也不易

   

如果使用引用:

传进来的实参会被形参 a 和 b 起别名,

通过别名进行操作,从而操作了实际的

参数

   

   

调用时,也很简单,传入 x、y,相当于 a 是 x 的别名,

b 是 y 的别名,a 和 b 交换,即 x 和 y 交换

   

   

   

   

如:

#include <stdlib.h>

#include<iostream>

using namespace std;

   

   

int main(void)

{

int a = 3;

int *p = &a;

int *&q = p;//指针类型的引用

*q = 5;

cout << a << endl;

system("pause");

return 0;

}

   

   

//结构体对象的引用

//typedef struct

//{

// int x;

// int y;

//

//}Coord;

//

//

//int main(void)

//{

// Coord c;

// Coord &c1 = c;

// c1.x = 10;

// c1.y = 20;

// cout << c.x << "," << c.y << endl;

// system("pause");

// return 0;

//}

   

//函数形参的引用

//void fun(int &a, int &b);

//

//int main(void)

//{

// int x = 10;

// int y = 20;

// cout << x << "," << y << endl;

// fun(x, y);

// cout << x << "," << y << endl;

// system("pause");

// return 0;

//}

//

//void fun(int &a, int &b)

//{

// int c = 0;//中间变量

// c = a;

// a = b;

// b = c;

//}

   

   

//C语言特色的传参

//void fun(int *a, int *b);

//

//int main(void)

//{

// int x = 10;

// int y = 20;

// cout << x << "," << y << endl;

// fun(&x, &y);

// cout << x << "," << y << endl;

// system("pause");

// return 0;

//}

//

//void fun(int *a, int *b)

//{

// int c = 0;//中间变量

// c = *a;

// *a = *b;

// *b = *c;

//}

   

vs2013中:

   

   

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

posted on 2017-02-11 21:37  siwuxie095  阅读(188)  评论(0编辑  收藏  举报

导航