设有定义: int a=12, b=23; int *p=&a; int *q =&b; 利用指针p 和q实现a和b的数值交换,并分别输出交换前后的a、b值。
时间: 2024-12-30 22:37:14 浏览: 24
要通过指针 `p` 和 `q` 实现整数 `a` 和 `b` 的数值交换,可以按照以下步骤进行:
1. 首先,将 `b` 的值赋给 `a`,即将 `q` 指向的值存储到 `p` 指向的位置。
```c
*p = *q;
```
2. 然后,将 `a` 的原始值(现在是 `b`)赋给 `b`,即把原来 `a` 的地址赋给 `q` 所指向的地方。
```c
*q = a; // 这里使用了a的原始值,不是刚刚的b
```
3. 最后,更新变量 `a` 和 `b` 的值,展示交换后的结果。
完整的代码如下:
```c
#include <stdio.h>
int main() {
int a = 12, b = 23;
int *p = &a;
int *q = &b;
printf("Before swap: a = %d, b = %d\n", a, b);
// 交换操作
*p = *q; // p指向的a变为b
*q = a; // q指向的b变为原来的a
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
```
运行此程序,会输出:
```
Before swap: a = 12, b = 23
After swap: a = 23, b = 12
```
相关问题
设有定义: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,b=3,c=4;,则以下选项中值为0的表达式是( )。 A. (!a==1)&&(!b==0) B. (a<b)&&!c||1 C. a&&b D. a||(b+b)&&(c*a)
选项B中的表达式值为0。该表达式可以拆分为三部分:(a<b)、(!c)和1。其中(a<b)的值为1,(!c)的值为0,1的值为1。因为逻辑运算符的优先级为非(!)> 与(&&)> 或(||),所以先计算(!c)的值为0,然后计算(a<b)&&!c的值为0,最后计算0||1的值为1,整个表达式的值为1。因此,选项B错误。
阅读全文