函数中使用指针计算数字逆序出现垃圾值,求助问题排查
数字逆序计算的问题分析与修复
问题根源
- 未初始化的变量导致垃圾值:main函数中的
Calcul变量未初始化,初始值是内存中的随机垃圾值,直接传入函数参与计算时会干扰结果。 - 逆序计算逻辑完全错误:原代码里的
*Calculinvers = p*10 + rem没有遵循逆序的计算规则——正确的逻辑应该是用当前已计算的结果乘以10,再加上新取到的余数,以此累积逆序数字。而你用固定值p=1计算,完全没有利用之前的计算结果。 - 冗余变量p:变量p在代码中没有起到任何有效作用,属于多余定义。
修正后的代码
int Invers(int x, int *Calculinvers) { // 初始化结果为0,彻底避免垃圾值干扰 *Calculinvers = 0; while (x != 0) { int rem = x % 10; // 正确的逆序累积逻辑:当前结果*10 + 新余数 *Calculinvers = *Calculinvers * 10 + rem; x = x / 10; } return *Calculinvers; } int main() { int a; printf("Introduceti numarul caruia vreti sa-i calculati inversul : \n"); scanf("%d", &a); // 主动初始化Calcul为0,双重保障 int Calcul = 0; Invers(a, &Calcul); printf("Inversul numarului este : %d\n", Calcul); return 0; }
修正说明
- 函数开头先将
*Calculinvers设为0,确保计算从干净的初始值开始,彻底解决垃圾值问题。 - 核心计算逻辑改为
*Calculinvers *10 + rem,实现逆序数字的累积(比如输入123时,会依次计算010+3=3,310+2=32,32*10+1=321)。 - 移除了无用的变量p,简化代码结构。
内容的提问来源于stack exchange,提问作者makasa29
相关产品推荐
相关产品推荐

