为什么编译器将变量理解为指针而它不是?

-1 c variables pointers function

我正在尝试编写这个程序:

编写一个函数digit(n, k),返回n(一个正整数)中的第 k 个数字(从右边开始)。例如

  • digit(829, 1) 返回 9
  • digit(829, 2) 返回 2
  • digit(829, 3) 返回 8

如果 k 大于 n 中的位数,则让函数返回 0。

我收到一条警告消息:

从返回类型为 int 的函数中返回 (int*)(int,int) 从指针生成整数而不进行强制转换

int digit(int a,int b);

int main (void){

    int i, c;
    printf("Enter the number");
    printf("Enter the digit you want to check");

    scanf("%d",&i);
    scanf("%d",&c);
    puts("\n");

    printf("%d", digit(i,c));
}

int digit (int a, int b){
    while(b>0)
    {
        int digit = a%10;
        a/=10;
        b--;
    }
    return digit;
}
Run Code Online (Sandbox Code Playgroud)

这有什么违法的?

Som*_*ude 6

return digit;
Run Code Online (Sandbox Code Playgroud)

你返回一个指向函数 digit本身的指针。

变量的数字是只在循环里地方。

您可能打算将此变量置于循环之外,但是您应该重命名它以免与函数混淆。

也许像

int get_digit(int number, int digit_number)
{
    int one_digit = 0;

    while(digit_number-- > 0)
    {
        one_digit = number % 10;
        number /= 10;
    }

    return one_digit;
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已经更改了所有符号的名称,希望当它们的名称描述它们的用途时,它们现在更有意义。

  • 因为此时没有变量可供您参考。在“return digital”语句中唯一名为“digit”的东西是函数。当变量“digit”的作用域用返回前一行的大括号关闭时,变量“digit”不再存在。 (4认同)