C++指针,引用,主要讲引用

2 篇文章 0 订阅
1 篇文章 0 订阅

重温一下C++指针引用

1.引用:
a)不开辟内存,是一个声明,必须要初始化
b)声明之后不可以变更
c)可以对引用,再次引用,多次引用的结果是一个变量具有多个别名
d)&符号前有数据类型时,叫做引用,int &ss;
其他的为取址, int* p = &b;
int a = 1;
int &pa = a;//pa为a的引用

int b = 2;
pa = b//赋值

关于指针,引用,指针的引用
void swap(int a,intb)//平级无法交换:1,2
void swap(int *a.int *b);//可以交换。2.1 开辟内存空间
void swap(int &a.int &b);//可以交换。2.1 不开辟内存空间

void swap(char a,charb)//平级。无法交换qqq,ppp @@
void swap(char **a.char **b) //可以交换 ,不建议这么写!!
char*p = *a
*a=*b
*b=*a

void swap(char &a,char&b)//平级。指针的引用,不开辟控件 ##
char*p = a
a=b
b=a

int main()

int a = 1;
int b = 2;

char* a = ‘qqq’;
char* b = ‘ppp’;

swap(a.b);@@
swap(&a.&b);!!
swap(a.b);##

cout <<a<<b;

引用提高篇:

1)指针可以有引用,不能定义引用的引用
int a;
int*p = &a;
int & sp = p;//is right
int & q=a;
int &&sq = q;//is wrong
2)可以定义指针的指针,不能定义引用的指针
int a;
int
p = &a;
int**sp = p;//is right
int & q=a;
int &sq = q;//is wrong 引用本身就是对指针的包装,现在这种情况,把包装好的在拆开,与设计初衷相悖。
3)可以定义指针的数组,但是不能定义引用的数组,但是可以定义数组的引用
int a,b,c;
int
arr[] = {&a,&b,&c};//is right
int &arr[] = {a,b,c};//is wrong引用的数组
int arr[] = {a,b,c};
int (&rarr)[3] = arr;//is right数组的引用
int *&Aarr =arr;//wrong
所谓数组引用,即指向数组的引用;
如: int a[10] ;
int (&b)[10] = a ;
如果写成: int a[10] ;
int
*&b = a ;
将会报错: cannot convert from ‘int [10]’ to ‘int *&’。

或许你会说在数组名不就是指向这个数组的一个指针吗?题中a是int类型的,b是指向int的引用,按理应该是正确的啊,为什么会报错呢?这是因为编译器对指向数组的引用检查更加严格,需要检查数组的维数,在这里a被理解成指向10个int数组的指针int [10],对于引用也需要相应的引用类型int (&)[10],即指向10个int数组的指针的引用。

2.引用,取址,指针,适用场景。
只要可能就用引用传递参数。
只要可能就返回引用。
如果能用引用就不要用指针。
只要可能就使用 const 保护引用和指针。
不要返回局部变量的引用。

必要时用值传递参数。
必要时返回值。
不要返回有可能退出作用域的引用。
不要引用空对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值