21.执行下列程序段后: int a=1,b=2,*p,*pa=&a,*pb=&b; p=pa; pa=pb; pb=p; printf("%d,%d",a,b); 输出结果是______。 A. 1,1 B. 1,2 C. 2,2 D. 2,1 标准答案:B
时间: 2024-04-02 10:31:33 浏览: 110
执行程序段后,`a`的初始值为1,`b`的初始值为2,`pa`指向`a`的地址,`pb`指向`b`的地址,`p`指向`pa`指向的地址。接下来进行指针交换操作,先将`pa`指向的地址赋值给`pb`,然后将`pb`指向的地址赋值给`pa`,最后将指针`p`赋值给`pb`,此时`pa`指向`b`的地址,`pb`指向`a`的地址,`p`指向`a`的地址。最后输出`a`和`b`的值,由于进行的是指针交换操作,`a`和`b`的值并没有改变,因此输出结果为`1,2`,选项B是正确的。
相关问题
有如下程序段 int *p a=10,b=1; p=&a; a=*p+b; 执行该程序段后,a的值为
11。程序的执行过程如下:
1. 定义整型指针变量 p 和整型变量 a、b,将 a 赋值为 10,将 b 赋值为 1。
2. 将 p 的值设置为变量 a 的地址,即 p 指向 a 的内存地址。
3. 执行 a=*p+b;首先会通过指针 p 获取 a 的值(即 10),然后加上变量 b 的值(即 1),最终将结果 11 赋值给变量 a。
4. 执行完该语句后,变量 a 的值变为 11。
以下代码能不能实现两数交换呢?为什么? int a = 10; int b = 20; int *pa = &a; int *pb = &b; int *pc = NULL; *pc = *pa; *pa = *pb; *pb = *pc; printf("%d %d\n", a, b);
这段代码无法实现两数交换,因为指针变量 `pc` 被赋值为 `NULL`,然后试图通过 `*pc = *pa` 将 `a` 的值赋给 `NULL` 所指向的内存空间,这是错误的操作,会导致程序崩溃。正确的做法是把 `pc` 指向 `a` 或者 `b` 的地址,即 `pc = &a` 或 `pc = &b`,然后再进行交换操作。修正后的代码如下所示:
```
int a = 10;
int b = 20;
int *pa = &a;
int *pb = &b;
int *pc = NULL;
pc = pa;
pa = pb;
pb = pc;
printf("%d %d\n", a, b);
```
输出结果为 `20 10`。
阅读全文