//《变量的引用》
// main.cpp
// Three_C++
//
// Created by 周双建 on 16/3/16.
// Copyright © 2016年 周双建. All rights reserved.
/*
第一:
介绍:建立引用的作用是:就是在给一个变量另起一个名字。以便在需要的时候可以方便、间接地应用该变量。
第二:
引用的基本形似:
int a ;
int &b = a;// 声明b是一个整型变量的引用变量,它被初始化为a
第三:
强调:对一个变量的引用的所有操作,实际上都是对其所代表(原来的)变量的操作。
第四:
重点:对变量声明一个引用,并不开辟内存单元。在声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。
*/
// 引用的简单使用
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int a = 10;
// 给 a 一个引用
int &b = a ;
// 我们对a 进行操作
a = 250 * a;
// 我们开始,现在对 a 和 b 的值进行查看。这里你自己可以猜一下,它们的值。
cout<<"first_a = "<<a <<","<<"first_b = "<<b<<endl ;
// 我们接着对 b 做点事
b = b /5 ;
// 我们在查看一下 a 和 b 的值。
cout<<"second_a = "<<a <<","<<"second_b = "<<b<<endl;
//让我们查看一下,它们的地址
cout<<"Adderss_a = "<< &a <<endl<<"Address_b = "<< &b <<endl;
int main_1();
main_1();
int main_2();
main_2();
int main_3();
main_3();
return 0;
}
/*
输出的结果:
first_a = 2500,first_b = 2500
second_a = 500,second_b = 500
Adderss_a = 0x7fff5fbff75c
Address_b = 0x7fff5fbff75c
Program ended with exit code: 0
*/
// 引用的说明
/*
第一:
引用不是一种独立的数据类型,必须与某种类型相联系。
int &b = a ; //正确
int &b ; // 错误
float a ; int &b = a ;// 错误
第二:
引用与其代表的变量共享同一内存单元,系统不会另外为引用开辟空间。
上面程序,a 和 b 的地址,相同:如下
Adderss_a = 0x7fff5fbff75c
Address_b = 0x7fff5fbff75c
第三:
怎么区分是引用还是取地址呢?
当 &a 的前面有类型时,它必定是引用。
如果前面没有类型,此时就是取地址。
第四:
对引用的初始化,可以用一个变量名,也可以用另一个引用。
int a = 3 ;
int &b = a ;
int &c = b ;
第五:
引用在初始化后不能在被从新声明为另一个变量的别名。
int a = 3 , b = 4;
int &c = a ;
c = &b ; // 错误
int &c = b ;// 错误
*/
/********小******试******牛*******刀***********/
#include <iostream>
using namespace std;
void zsj_Swap (int a , int b){
int temp ;
temp = a ;
a = b;
b = temp;
}
int main_1(){
int j = 2 , s = 23 ;
zsj_Swap(j, s);
// 我们可以猜测一下,j 和 s 的值
cout<< "j = "<< j <<endl<< "s = "<<s <<endl;
return 0 ;
}
/*
输入结果:
j = 2
s = 23
Program ended with exit code: 0
从结果上,我们看到没有成功。为什么呢?
// 变量的作用域,有关。
*/
// 下面,我们要使用,指针,来进行运算
#include<iostream>
using namespace std;
void Swap ( int * a ,int * b){
int temp ;
temp = *a ;
*a = *b ;
*b = temp;
}
int main_2 (){
int j = 2 , s = 5 ;
Swap(&j, &s);
// 我们在看看 j 和 s 的值
cout<< "*p_j = " << j << endl << "*p_s = "<< s << endl;
return 0;
}
/*
输出的结果:
*p_j = 5
*p_s = 2
Program ended with exit code: 0
// 我们从输出结果上看到,我们交换成功。这种方法是“值传递”方式,向一个指针变量传送一个地址。然后再通过指针变量访问变量。
*/
// 下面,我们在使用引用
#include <iostream>
using namespace std;
void K_Swap (int &a , int &b){// 你看到这里,你有没有什么想法???
int temp;
temp = a;
a = b;
b = temp;
}
int main_3(){
int j = 3 ,s = 2;
K_Swap(j, s);
// 我猜一下,结果
cout<<"K_j = "<<j <<endl<<"K_s = "<<s <<endl;
return 0;
}
/*
输出结果:
K_j = 2
K_s = 3
Program ended with exit code: 0
我们看到也是成功的。这叫传递变量的别名。
*/