c++ 中最躲避不开的两个常用的词语,引用和指针,为什么需要引用呢,又为什么需要指针呢,接下来为你一 一解答。
1、什么是引用,引用就是一个变量的别名,所以必须初始化,且没有空引用,不能改变指向,什么是指针,指针是一个变量,存储的是一个地址,指向内存的一个存储单元,指针可以为空即夜指针,可以改变指向,可以进行拷贝,指针可以有多级,而引用只有一级。
#include <iostream>
int main()
{
int a = 10;
int& i = a;
int* p = &a;
std::cout << "hello i:" << i <<";p:"<<*p<<std::endl;
}
2、左值引用和右值引用
左值引用就是我们常规的引用需要绑定到左值,右值引用则必须绑定到一个右值,字面量的值,取不到它的地址,我们称为右值,右值引用可以实现转移语义,消除两个对象拷贝时不必要的拷贝,节省资源。
#include <iostream>
void test(int& a)
{
a = 100;
}
int main()
{
int a = 10;
//左值引用
int& i = a;
int* p = &a;
test(a);
//移动语义
int b = std::move(a);
//右值引用
int&& c = 10;
std::cout << "hello i:" << i <<";p:"<<*p<<std::endl;
std::cout << "hello b:" << b <<"hello a:" << a << "hello c:" << c<<std::endl;
}
3、指向指针的引用
#include<iostream>
using namespace std;
int main()
{
int a = 10,x = 100;
int *b = &a;
*b = 20;
int *& c = b;
c = &x;
cout<<"c = "<<*c<<"\t"<<"b = "<<*b<<endl;
cout<<&c<<" "<<&b<<endl;
return 0;
}
4、指针引用的指针
因为引用没有自己的地址,所以指针不能指向引用
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int & b = a;
int & * p = &b; //[Error] cannot declare pointer to 'int&'
cout<<*p<<endl;
return 0;
}
感觉也没有什么东西可以讲的,比较简单,由于本人经验有限,如有问题,欢迎修正。