人造人
发表于 2018-10-4 19:35:42
我们遇见过 发表于 2018-10-4 19:11
嗯。。对对,我想着应该就只出在实参和形参那。。所以就说了那么多,就是第一个可以编译,第二个不可以
r1是一个引用,引用了变量a
r2是一个const引用,引用了常量3
如果不加const会报错,因为引用的是右值,常量是右值
int main()
{
int a = 100;
int &r1 = a;
const int &r2 = 3;
return 0;
}
&qu
一个&和qu组成的表达式的值是一个右值
要引用这个右值,需要const引用
下面代码可以通过编译
#include <cstdio>
#include <cstdlib>
typedef struct Qnode
{
int data;
Qnode *next;
}Qnode;
typedef struct Lq
{
Qnode *front;
Qnode *rear;
}Lq;
void init(Lq *const &qu)
{
/*qu = (Lq *)malloc(sizeof(Lq));
(*qu).front = (*qu).rear = NULL;
printf("初始化成功!\n");*/
}
int main()
{
Lq qu;
init(&qu);
return 0;
}
claws0n
发表于 2018-10-4 19:37:36
我们遇见过 发表于 2018-10-4 18:33
代码一本来就是对的啊。。。代码一我理解啊,,,Lq*p=&qu,p和&qu的数据类型不一样吗。。
Lq qu; // 结构体
Lq * p; //指向结构体 Lq 的指针
int a; int *p; 这两个一样吗?从头到尾都不一样……
你的函数用 init(Lq* &qu) 相当于 init(Lq **qu),但不一样的地方在于函数内部的一些写法和传参的形式
传参 init(p) vs init(&p) 函数内部 qu vs (*qu)
我们遇见过
发表于 2018-10-4 19:40:19
人造人 发表于 2018-10-4 19:35
r1是一个引用,引用了变量a
r2是一个const引用,引用了常量3
如果不加const会报错,因为引用的是右值 ...
明白了~谢谢大佬,非常量引用的初始值必须是左值,哇塞,心情舒畅好多,感谢大佬{:10_297:}
我们遇见过
发表于 2018-10-4 19:50:09
claws0n 发表于 2018-10-4 19:37
Lq qu; // 结构体
Lq * p; //指向结构体 Lq 的指针
我理解了,就是你那个朋友说的,因为非常量引用的初始值必须是左值,而&qu是右值,如果变成常量引用的话函数体内的代码又没办法运行。谢谢大佬了,耽搁了这么长时间,万分感谢{:10_256:}
claws0n
发表于 2018-10-4 19:54:17
我们遇见过 发表于 2018-10-4 19:50
我理解了,就是你那个朋友说的,因为非常量引用的初始值必须是左值,而&qu是右值,如果变成常量引用的话 ...
4 楼就告诉你了,取址是右值……好吧,解决就好
claws0n
发表于 2018-10-4 19:57:25
人造人 发表于 2018-10-4 19:35
r1是一个引用,引用了变量a
r2是一个const引用,引用了常量3
如果不加const会报错,因为引用的是右值 ...
那样是可以编译通过,不过就废了{:10_282:}
人造人
发表于 2018-10-4 20:00:02
claws0n 发表于 2018-10-4 19:57
那样是可以编译通过,不过就废了
?
#include <cstdio>
#include <cstdlib>
typedef struct Qnode
{
int data;
Qnode *next;
}Qnode;
typedef struct Lq
{
Qnode *front;
Qnode *rear;
}Lq;
void init(Lq *const &qu)
{
qu->front = NULL;
qu->rear = NULL;
/*qu = (Lq *)malloc(sizeof(Lq));
(*qu).front = (*qu).rear = NULL;
printf("初始化成功!\n");*/
}
int main()
{
Lq qu;
Lq *tmp = &qu;
printf("front:%.8X, rear:%.8X\n", tmp->front, tmp->rear);
init(&qu);
printf("front:%.8X, rear:%.8X\n", tmp->front, tmp->rear);
return 0;
}
人造人
发表于 2018-10-4 20:00:54
claws0n 发表于 2018-10-4 19:57
那样是可以编译通过,不过就废了
引用了一个指针
这个引用是const的,指针又不是
我们遇见过
发表于 2018-10-4 20:02:44
claws0n 发表于 2018-10-4 19:54
4 楼就告诉你了,取址是右值……好吧,解决就好
恩恩。。可是我当时不知道非常量引用必须是左值。。。{:10_266:},其实这是我第一次用引用- -{:10_250:}
claws0n
发表于 2018-10-4 20:09:42
人造人 发表于 2018-10-4 20:00
引用了一个指针
这个引用是const的,指针又不是
好的……有点被骗的感觉
确实,后面的元素再动态申请就好
claws0n
发表于 2018-10-4 20:11:45
我们遇见过 发表于 2018-10-4 20:02
恩恩。。可是我当时不知道非常量引用必须是左值。。。,其实这是我第一次用引用- -
没用过,第一次解释{:10_250:}
因为引用相当于被引用的变量,所以左值也考虑了
我们遇见过
发表于 2018-10-4 20:36:59
claws0n 发表于 2018-10-4 20:11
没用过,第一次解释
因为引用相当于被引用的变量,所以左值也考虑了
哈哈哈,这玩意还挺好玩{:10_250:}