int &&a=i为啥是错误的?
时间: 2023-07-14 17:13:46 浏览: 55
因为`int &&`是右值引用类型,只能绑定到右值(临时对象、字面量、表达式的结果等),而不能绑定到左值(变量、函数返回值等)。而在`int &&a=i`中,i是一个左值,因此无法绑定到`int &&a`上。如果想要实现将左值绑定到右值引用类型上,可以使用`std::move`函数将其转换为右值引用。例如,可以写成`int &&a = std::move(i)`。
相关问题
#include <bits/stdc++.h> using namespace std; int main( ) { int i; int *P = &i; i = 3; int a; a = &p; cout << a ; }
这段代码有一些语法错误,应该修改为以下这样:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int i;
int *P = &i;
i = 3;
int *a; // 修改为指向指针的指针
a = &P; // 取 P 的地址赋值给 a
cout << a; // 输出指针 a 的地址
return 0;
}
```
这个程序的功能是定义了一个整型变量 i 和一个指向整型的指针 P,将指针 P 指向变量 i 的地址,然后将 i 的值赋为 3。接着定义了一个指向指针 P 的指针 a,将指针 P 的地址赋值给 a,并输出指针 a 的地址。
下列关于指针的用法中错误的是( )。 A. int i,*p; p =&i; B. int *p; p = NULL; C. int i,*p=&i; D. int i = 5,*p; *p = &i;
### 回答1:
&i;
B. int i=10,*p=&i;
C. int i=10,*p; *p = &i;
D. int i=10,*p; p = i;
在这里,错误的是 C 选项。在 C 选项中,*p 尝试去赋值 &i,但是 *p 是一个指针变量,而 &i 是 i 变量的地址。因此,不能将 &i 赋值给 *p。
正确的用法应该是将 p 赋值为 &i,然后使用 *p 来访问 i 变量的值。例如:
int i = 10, *p;
p = &i;
*p = 20; // 现在 i 的值为 20
另外,A 选项是正确的,B 选项也是正确的,D 选项是错误的。在 D 选项中,p 尝试赋值 i,但是 p 是一个指针变量,而 i 是一个整数变量。因此,不能将 i 赋值给 p。
### 回答2:
&i; *p= 10; B. int a[5]; int *p = a; C. int i; int *p = &i; D. int a[5]; int *p = &a;
### 回答3:
&i; B. int *p,i; p = &i; C. int *p,i; *p = &i; D. int i,*p; *p = 10; 正确答案是:C. int *p,i; *p = &i;
解释:C选项中,指针p未被初始化,不能直接将地址&i赋给*p。应该先为指针p分配内存空间,然后再将地址赋给它。正确写法应该是 int *p,i; p = &i; *p = 10;