You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下述C程序中为什么无法将指针取值赋值给变量,且b的值无法修改?

你的代码无法实现预期的赋值效果,是因为变量a的值被提前覆盖,导致指针p的取值已经不是原始a的值,具体逻辑错误如下:

你当前的代码执行流程(假设输入a=1,b=2为例):

  1. 指针p指向变量a,指针q指向变量b,此时*p = 1,*q =2
  2. 先执行a = *q,变量a的值被修改为2,由于p始终指向a,此时*p的取值同步变为2
  3. 再执行b = *p,相当于把2赋值给b,b的取值还是原来的2,所以看起来没有变化

如果你的预期是交换a和b的取值,需要新增临时变量存储a的原始值,避免被覆盖后丢失,修复后代码如下:

#include <stdio.h>

int main()
{
    int a, b, temp;
    int *p = &a;
    int *q = &b;
    printf("enter the value of a and b: ");
    scanf("%d%d", &a, &b);
    printf("value of a and b is %d and %d\n", a, b);
    // 用临时变量保存a的原始值
    temp = *p;
    a = *q;
    b = temp;
    printf("swapped value of a and b is %d and %d\n", a, b);
    return 0;
}

额外注意两个细节:

  • 标准头文件是小写的stdio.h,不要大写首字母
  • printf输出末尾增加换行符\n,避免输出内容堆叠无分隔

内容的提问来源于stack exchange,提问作者Vishwas holla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:27:04