int a = 2; int *q = &a; int *p = q;时为什么q=a不合法
时间: 2024-06-06 22:05:10 浏览: 22
在C++中,&运算符可以获得一个变量的地址,而*运算符可以用来指向一个地址。在你的代码中,int *q = &a; 表示将变量a的地址赋值给指针变量q。因此,q指向了a的地址。
如果你想将q的值赋给a,应该使用 *q = a;,这样会将a的值赋给q所指向的地址中的内容,也就是a本身的值。而 q = a; 不合法,因为它试图将一个整数值赋给指针变量q,这是不允许的。
相关问题
int * p=null;int * a=*p;
这段代码存在指针错误。首先,`p`被初始化为`null`,也就是空指针,不能直接用来访问内存。其次,在第二行中,`*p`表示访问空指针所指向的内存,会导致程序崩溃。应该将指针`p`指向一个合法的内存地址,例如:
```c
int x = 10;
int *p = &x; // 将指针p指向变量x的地址
int *a = p; // 将指针a指向指针p所指向的内存
```
这样就可以将指针`p`指向一个合法的内存地址,并将其赋值给指针`a`。注意,指针`a`和指针`p`指向的是同一块内存,它们具有相同的值,但是类型为`int *`。
int a,*p=a,n;为什么是错的
这个声明是错的,因为在声明时,指针变量 `p` 没有指向任何有效的内存地址,而是将其初始化为 `a` 的值,这是不合法的。同时,`n` 没有被初始化,也可能导致程序出现问题。
如果想要将指针 `p` 指向变量 `a`,可以这样声明:
```
int a, *p = &a, n = 0;
```
这里使用取地址符 `&` 来获取变量 `a` 的地址,然后将其赋给 `p` 指针变量。同时,变量 `n` 被初始化为 0。