引用是C++引入的一个概念,实际上像一个语法糖,本质上是指针的一种用法,只是隐藏了许多技术细节。
引用当左值,相当于一个别名
int main(){
int i=0;//i也是别名
int &a=i;
a=100;
int b=10;
a>b?a:b=200; //三目运算符当左值
return 0;
}
//上下对应
int main(){
int i=0;
int* const a=&i; //a的指向不能被改变,a指向的空间可以改变
*a=100;
int b=10;
*(a>b?&a:&b)=200;
return 0;
}
- 函数的返回值也可以是引用,可链式编程。eg:cout<<“hello”<<“world”<<endl;
指针的引用
void getNum(int ** const n){
int *tmp=(int*)malloc(sizeof(int));
*tmp=1;
*n=tmp;
}
int main(){
int *a;
getNum(&a);//此时*a=1;
free(a);
return 0;
}
//上下对应
void getNum(int *&n){
n=(int*)malloc(sizeof(int));
*n=2;
}
int main(){
int *a;
getNum(a);//此时*a=2
free(a);
return 0;
}
常量引用
int main(){
int i=0;
const int &a=i;
int &b=0;//错误,b必须可以读地址
const int &c=0;//正确,const 标识符将c=0存储到符号表中,要取地址将另外分配一个空间,可以取地址
return 0;
}
//上下对应
int main(){
int i=0;
const int *a=&i;
int *b=&0;//??不能取字面量地址
//未知
return 0;
}