c - 我很难使用引用传递

标签 c pass-by-reference

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

我的代码在按值传递时可以工作,但在按引用传递时无法正确执行。


我的主要内容:

#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;
        }
    }
}

最佳答案

正如之前有人所说,largest_digit 函数是 void,因此在调用时不能将其赋值给变量。您可以做的是,在调用之前修改 *digit,然后将 *digit 的值分配给您想要的值,在本例中为 hold1.

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

以下是建议的修改:

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

关于c - 我很难使用引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64547445/

相关文章:

c - 为什么 C 中的条件运算符在我的情况下不起作用?

c - 如何使用 C/C++ 对经过训练的神经网络进行推理?

c++ - 传递参数(本身就是一个引用)目标的引用

C++:合并排序问题:超出范围?

arrays - 更新通过引用传递的数组中的项目

c - 使用 C 代码构建 R 包,缺少 dll

c - 安全结构嵌入式系统

c - 如何在 visual studio 中开发最终产品?

C++ 通过引用传递静态数组和动态数组

c - 在 C 中通过引用传递字符串