下述C程序中为什么无法将指针取值赋值给变量,且b的值无法修改?
你的代码无法实现预期的赋值效果,是因为变量a的值被提前覆盖,导致指针p的取值已经不是原始a的值,具体逻辑错误如下:
你当前的代码执行流程(假设输入a=1,b=2为例):
- 指针
p指向变量a,指针q指向变量b,此时*p = 1,*q =2 - 先执行
a = *q,变量a的值被修改为2,由于p始终指向a,此时*p的取值同步变为2 - 再执行
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
相关产品推荐
相关产品推荐

