我不知道为什么当我尝试进行引用传递以使用递归查找整数的最大数时,代码中不断出现错误。
我的代码在按值传递时可以工作,但在按引用传递时无法正确执行。
我的主要内容:
#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/