为何接收int指针的C语言函数输出全为0?求技术支持
问题排查与修复
错误1:scanf格式字符串写错
你的scanf调用里把格式符%d写成了&d,这会导致输入无法被正确读取到变量a和b中。格式字符串必须以%开头指定数据类型,正确写法是:
scanf("%d %d", &a, &b);
错误2:未计算绝对差
update函数中,你直接计算*a - *b,但这不是绝对差——如果原始b值大于a,结果会是负数,不符合“绝对差为正数”的需求。需要用abs()函数获取绝对值,同时要包含stdlib.h头文件(abs函数定义在该头文件中)。
额外小问题:printf换行写法错误
原代码中printf直接换行属于语法错误,应该用转义字符\n实现换行。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> // 引入abs函数的头文件 void update(int *a,int *b) { int res1,res2; res1 = *a + *b; res2 = abs(*a - *b); // 计算两数的绝对差 *a = res1; *b = res2; } int main() { int a, b; int *pa = &a, *pb = &b; scanf("%d %d", &a, &b); // 修正格式符错误 update(pa, pb); printf("%d\n%d", a , b); // 修正换行写法 return 0; }
测试输入7 2,会输出预期的9和5。
内容的提问来源于stack exchange,提问作者Adewunmi Oladele
相关产品推荐
相关产品推荐

