--------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】