设有以下语句,请指出其中错误并改正:int a,*p=a,*q;q=a;
时间: 2024-03-13 18:46:09 浏览: 20
这段代码中有两处错误。首先是在定义指针变量 `p` 时,缺少了 `*` 号,应该写成 `int *p = &a;`。其次是在定义指针变量 `q` 时,也需要初始化,应该写成 `int *q = &a;`。因此,正确的代码应该是:
```c
int a, *p = &a, *q = &a;
```
或者可以分成多行写:
```c
int a;
int *p = &a;
int *q = &a;
```
这样就可以正确定义并初始化两个指针变量 `p` 和 `q`,使它们都指向变量 `a` 的地址。
相关问题
设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是______。 A *p=*q; B p=q; C *p=&n1; D p=*q;
与`n2=n1;`语句等价的是`*p=*q;`语句。
`*p`表示指针p指向的变量的值,`*q`表示指针q指向的变量的值,因为`q=&n1`,所以`*q`就是n1的值,因为`p=&n2`,所以`*p`就是n2的值,所以`*p=*q`就相当于`n2=n1`。
其余选项的意义如下:
- A *p=*q; 表示将指针q指向的变量的值赋值给指针p指向的变量。
- B p=q; 表示将指针q的值赋值给指针p。
- C *p=&n1; 表示将指针p指向n1的地址。
- D p=*q; 表示将指针q指向的变量的值赋值给指针p。
若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是 A 。 A. q=a; B.*p=*q; C.a=*q; D.p=q;
答案是A. q=a。
解析如下:
- B. *p = *q; 是合法的,将p所指向的int型变量的值设置为q所指向的int型变量的值;
- C. a = *q; 是合法的,将a变量的值设置为q所指向的int型变量的值;
- D. p = q; 是合法的,将p指向变量a的地址;
- A. q = a; 是非法的,因为q是一个int型指针,而a是一个int型变量,它们的类型不匹配,不能进行赋值操作。
因此,选项A是非法的赋值语句。