c++【引用】

引用(reference)
c/c++ 中指针的作用基本一样,但是c++增加了另外一种给函数传递地址的途径,就是按照引用传递(pass-by-reference)。
变量名实质是一段连续内存空间的别名,程序通过变量名来申请并命名空间,通过变量名可以使用存储空间。引用可以作为一个已定变量的别名。基本语法:Type &ref=val;& 在这里是起标识作用,而不是取地址。必须在声明引用变量时进行初始化。引用初始化之后不能改变。不能有NULL引用。也可以建立对数组的引用。

int a=10;
int &b=a;
cout <<a <<endl;//10
cout <<b <<endl;//10
//操作b就相当于操作a
b=100;
cout << a << endl;//100
//一个变量可以有多个别名
int &c=a;
//a,b,c地址相同
cout << &a << &b << &c << endl;
//不能改变引用
int &ref=a;
ref = b;//err

在这里插入图片描述
给数组取别名

int arr[5]={1,2,3,4,5};
//方式1
int (&my_arr)[5] = arr; //加()的作用是因为[] 优先级比 & 高。 my_arr为数组arr别名
//方式2
typedef int TYPE_ARR[5];
TYPE_ARR &my_arr=arr;

函数参数

int a=1,b=2;
//c++
void swap(int &a,int &b){
	int t=a; a=b ; b=t;
}
swap(a,b);
//c
void swap(int *a,int *b){
	int temp = *a; *a=*b; *b=temp;
}
swap(&a,&b);

引用作为函数的返回值

int& my_data(){
	/*static*/int num=100;
	return num;
}
void test(){
	int &ret = my_data();
	//非法访问内存,num是局部变量函数执行完内存就释放.修改+static
	cout << ret; 
}

引用本质

引用本质在C++内部是一个指针常量,因此所占空间与指针大小相同。Type& ref=val; 等价于 Type* cosnt ref=&val

int data=10;
int &a=data;
int* const a=&data;
a=11;

指针的引用

//c
void my_str(char **my_str){ // my_str=&str;
	my_str = (char *)calloc(1,32);
	strcpy(my_str,"hello wrold");
}
char* str=NULL;
my_str(&str);
//c++
void my_str(char* &my_str){ // my_str = str
	my_str=(char *)calloc(1,32);
	strcpy(my_str,"hello world");
}
my_str(str);

常引用

typedef struct{
	int num;
	char[20] name;
}STU;
void test(STU tmp){} //tmp开辟独立空间
void test(STU &tmp){} //STU &tmp = lucy,tmp没有开辟独立空间
STU lucy = {100,"lucy"};
test(lucy);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值