指针&引用&const
2017-07-24 14:12
316 查看
//`引用
#include<iostream>
using namespace std;
void test1()
{
int a;
int &b=a;
cout<<"a:address->"<<&a<<endl;
cout<<"b:address->"<<&b<<endl;
a=2;
b=3;
int &c=b;
c=4;
cout<<a<<endl;//4
}
int main()
{
test1();
return 0;
}
引用:引用不是定义一个新的变量,而是给一个已定义的变量重新起一个别名。
定义的格式为:类型&引用变量名 = 已定义过的变量名。
引用的特点:
(1)一个变量可以取多个别名;
(2)因引用必须初始化。
(3)引用只能在初始化的时候饮用一次,不能改变为再引用其他的变量。
//const 引用
#include<iostream>
using namespace std;
void test2()
{
int d1=4;
const int &d2 = d1;
d1=3; //d1改变d2也改变
//d2=5;
//不能给常量赋值
const int d3 = 1;
const int &d4=d3;
const int &d6 = 5;//常量具有常性,只有常引用可以引用常量
double d7 = 1.1;
//int &d8 = d7; //d7是double类型,d8是int,d7赋值给d8时会产生一个临时变量
//也就是说d8引用的是这个具有常性的临时变量,所以不能赋值。
const int& d9 = d7;
}
int main()
{
test2();
return 0;
}
//引用做返回值和引用传参
#include <iostream>
using namespace std;
int& Add(int& x,int& y)
{
int ret = 0;
ret = x+y;
return ret;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = Add(a,b);
cout<<ret<<endl;
return 0;
}
//引用传参
#include <iostream>
using namespace std;
void Swap(int& x,int& y)
{
int tmp = x;
x=y;
y=tmp;
}
int main()
{
int a = 10;
int b =
20;
cout<<a<<" "<<b<<endl;//10 20
Swap(a,b);
cout<<a<<" "<<b<<endl;// 20 10
return 0;
}
结论:
(1)不要返回一个临时对象的引用。
(2)如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,这样更高效。
//引用和指针的区别和联系
(1)引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变。
(2)引用必须指向有效的变量,指针可以为空。
(3)sizeof指针对象和引用对象的意义不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指着是对象地址的大小。
(4)指针和引用的自增自减的意义不一样。
(5)相对而言,引用比指针更安全。
总结:
指针比引用更灵活,但是也更危险,使用指针时一定要注意检查指针是否为虑。指针所指的地址释放后最好置为0;否则可能存在野指针。
#include<iostream>
using namespace std;
void test1()
{
int a;
int &b=a;
cout<<"a:address->"<<&a<<endl;
cout<<"b:address->"<<&b<<endl;
a=2;
b=3;
int &c=b;
c=4;
cout<<a<<endl;//4
}
int main()
{
test1();
return 0;
}
引用:引用不是定义一个新的变量,而是给一个已定义的变量重新起一个别名。
定义的格式为:类型&引用变量名 = 已定义过的变量名。
引用的特点:
(1)一个变量可以取多个别名;
(2)因引用必须初始化。
(3)引用只能在初始化的时候饮用一次,不能改变为再引用其他的变量。
//const 引用
#include<iostream>
using namespace std;
void test2()
{
int d1=4;
const int &d2 = d1;
d1=3; //d1改变d2也改变
//d2=5;
//不能给常量赋值
const int d3 = 1;
const int &d4=d3;
const int &d6 = 5;//常量具有常性,只有常引用可以引用常量
double d7 = 1.1;
//int &d8 = d7; //d7是double类型,d8是int,d7赋值给d8时会产生一个临时变量
//也就是说d8引用的是这个具有常性的临时变量,所以不能赋值。
const int& d9 = d7;
}
int main()
{
test2();
return 0;
}
//引用做返回值和引用传参
#include <iostream>
using namespace std;
int& Add(int& x,int& y)
{
int ret = 0;
ret = x+y;
return ret;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = Add(a,b);
cout<<ret<<endl;
return 0;
}
//引用传参
#include <iostream>
using namespace std;
void Swap(int& x,int& y)
{
int tmp = x;
x=y;
y=tmp;
}
int main()
{
int a = 10;
int b =
20;
cout<<a<<" "<<b<<endl;//10 20
Swap(a,b);
cout<<a<<" "<<b<<endl;// 20 10
return 0;
}
结论:
(1)不要返回一个临时对象的引用。
(2)如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,这样更高效。
//引用和指针的区别和联系
(1)引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变。
(2)引用必须指向有效的变量,指针可以为空。
(3)sizeof指针对象和引用对象的意义不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指着是对象地址的大小。
(4)指针和引用的自增自减的意义不一样。
(5)相对而言,引用比指针更安全。
总结:
指针比引用更灵活,但是也更危险,使用指针时一定要注意检查指针是否为虑。指针所指的地址释放后最好置为0;否则可能存在野指针。
相关文章推荐
- C++ const限定符之顶层const & 底层const & 指针 & 引用之间的关系
- 引用&指针和引用&const的关系
- 指针与引用的初始化&顶层底层const变量初始化问题
- 关于指针、const、typedef、作用域::、引用&的一些理解
- const T*& 指针的引用、指针的指针、const
- 指针和引用---int*、int&、int*&、int&*、int**
- 引用&指针
- C++中引用、指针与const
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别
- const限定修饰符,常量指针,引用类型
- C和C++中const的区别,引用,一级指针和const组合
- c的指针*和引用&
- C++中指针,引用与const,以及const中的临时量对象的探讨
- 传递指向指针的引用(int *&i)
- 【杂记】引用和指针以及const
- 常引用,const CString&,引用的效率
- 关于指针的引用*&
- C++ 引用和指针 const与#define #define与内联函数
- const和引用(&)测试小程序
- 【C++】C++基础:指针__引用__const