c - 我很难使用通过引用传递
问题描述
我不知道为什么当我尝试通过引用传递时,我的代码中不断出现错误,以使用递归查找最大整数。
我的代码在按值传递时有效,但在按引用传递时我未能正确执行。
我的主要:
#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
函数是无效的,因此在调用时不能将其分配给变量。相反,您可以做的是*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
推荐阅读
- autodesk-forge - 如何在 Autodesk Forge Viewer Extensions 中定制选项和样式
- flutter - 我如何制作关于时间和日期的甘特图?
- ruby-on-rails - 如何使用 Rails 允许数组 json?
- yaml - 如何转义 RASA 意图示例中的特殊字符?
- jinja2 - 在 NeoVim 中结合 jinja2 和 salt 语法高亮
- c++ - 一天中的月份,其中一个 for 循环或 range-v3 lib 中的序列
- javascript - JavaScript中的变量和函数问题
- ant-media-server - 如何在 Ant Media Server 中生成 VoD 预览
- c# - ListView 中的 Android Xamarin 按钮
- cygwin - 为什么我在 Windows 10 下的 Cygwin 中运行 shell 脚本时收到错误消息 `" for writing : Invalid argument`?