首页 > 解决方案 > 我很难使用通过引用传递

问题描述

我不知道为什么当我尝试通过引用传递时,我的代码中不断出现错误,以使用递归查找最大整数。

我的代码在按值传递时有效,但在按引用传递时我未能正确执行。


我的主要:

#include <stdio.h>
#include <math.h>

void largest_digit(int* digit);

int main() {
   int num;

   printf("\nPlease enter a number ");
   scanf("%d", &num);

   largest_digit(&num);
   printf("The largest digit = %d\n", num);

   return 0;
}

我的功能:

void largest_digit(int* digit) {
   int hold, hold1;

    if(*digit == 0 || *digit < 0) {
        *digit = 0;
        *digit;
        return;
    }

    // If-statement with Recursion.
    if(*digit > 0){
        hold = *digit % 10;
        hold1 = largest_digit(*digit/10);

        if(hold > hold1) {
            hold = *digit;
            *digit;
            return;
        } else {
            hold1 = *digit;
            *digit;
            return;
        }
    }
}

标签: cpass-by-reference

解决方案


正如有人之前所说,该largest_digit函数是无效的,因此在调用时不能将其分配给变量。相反,您可以做的是*digit在调用之前进行修改,然后将 的值分配给*digit您想要的值,在这种情况下为hold1.

另一件事是您需要*digit在返回之前将值保存到其中,例如,hold = *digit您应该做而不是做*digit = hold

以下是建议的修改:

void largest_digit(int* digit) {
   int hold, hold1;

    if(*digit == 0 || *digit < 0) {
        *digit = 0;
        return;
    }

    // If-statement with Recursion.
    if(*digit > 0){
        hold = (*digit) % 10;
        (*digit) /= 10;
        largest_digit(digit);
        hold1 = *digit;

        if(hold > hold1) {
            *digit = hold;
            return;
        } else {
            *digit = hold1;
            return;
        }
    }
}

有了这个主线,

int main() {

   int a=123, b=652, c=3274;
   largest_digit(&a);
   largest_digit(&b);
   largest_digit(&c);
   printf("%d\n",a);
   printf("%d\n",b);
   printf("%d\n",c);

   return 0;
}

输出是

3
6
7

推荐阅读