引用:&
&放在左边就是引用,放在右边就是取地址
int main() {
//引用的类型必须相同,一经引用,不可以在被引用
int a = 100;
int &b = a;//b引用a之后,两个同时都会改变,此时b已经指向a了,如果在来一个c的话,不能在去指向c。b和a的类型必须相同
b = 304;//必须初始化,int就是初始化
printf("a:%d,b:%d\n", a, b);
}
给数组起别名:
//给数组起别名
int main() {
int arr[10];
for (int i=0;i < 10;i++) {
arr[i] = i;
}
//用&引用,起别名
int (&parr)[10] = arr;//用parr引用arr,相当于是arr重新赋值给了parr
for (int i = 0;i < 10;i++) {
cout << parr[i] << endl;
}
}
第二种方式起别名,typedef
//第二种方式起别名
typedef int Arrpy[10];
Arrpy &parr2 = arr;
for (int i = 0;i < 10;i++) {
cout << parr2[i] << " ";
}
cout << endl;
//尽量使用const替代define
//define宏常量没有类型概念
//define宏没有作用域概念
参数的传递方式:
扫描二维码关注公众号,回复:
5818994 查看本文章
值传递:
void swap1(int a,int b) {
int temp = a;
a = b;
b = temp;
}
void s1(){
int a = 32;
int b = 43;
swap(a, b);//传递;两个值进去
cout << "a:" << a << " b:"<<b << endl;
}
指针传递:
//指针传递
void swap2(int *a,int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void s2() {
int a = 20;
int b = 65;
swap2(&a, &b);
cout << "a:" << a << "b:" << b << endl;
}
运行结果:
引用传递:
//引用传递
void swap3(int &a,int &b) {
int temp = a;
a = b;
b = temp;
}
void s3() {
int a = 342;
int b = 545;
swap3(a, b);
cout << "a:" <<a << "b:" << b << endl;
}
int main() {
s3();
}
如果函数的返回值是引用的话,那么可以是作为左值的操作
int & test07(){
static int a = 120;
return a;
}
int main() {
int &res = test07();//内部就是int * const res=&test07();内部就是一个指针常量
cout << res <<endl;
}
注意:不要返回函数局部变量的引用
引用的本质就是在C++内部实现的指针的常量,指针的本质就是一个指针常量