C语言:递归函数中x + 1和x ++之间的区别?

Yu_*_*ain 1 c recursion

我的老师要求编写一个程序,使用递归函数打印每个数组元素的功能.

我的代码:

#include <stdio.h>
#include <conio.h>

void pow(int a[10],int i);

main()
{
    int a[10],i,c=0;
   printf("Enter 10 numbers:\n");
   for(i=0;i<10;i++)
    scanf("%d",&a[i]);
   printf("Power of elements in array:\n");
   pow(a,c);
   getch();
}

void pow(int a[10],int i)
{
    if(i!=10)
   {
    printf("%d\n",a[i]*a[i]);
      pow(a,i+1);
   }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有遇到任何问题.但是,当我将第三行最后一行 pow(a,i+1)更改 pow(a,i++) 为输出时,无数个.

任何人都可以解释一下为什么它最终会像这样?当我将i + 1改为i ++时究竟发生了什么?

先感谢您!

Vla*_*cow 5

C中有两个增量运算符:例如,其中一个是后缀或后增量运算符

i++
Run Code Online (Sandbox Code Playgroud)

例如,其他是一元运算符或preincrement运算符

 ++i
Run Code Online (Sandbox Code Playgroud)

postincrement运算符的表达式的值是操作数增加之前的值.因此这个电话

pow(a,i++);
Run Code Online (Sandbox Code Playgroud)

相当于

pow(a,i), i = i + 1;
Run Code Online (Sandbox Code Playgroud)

您可以使用preincrement运算符代替postincrement运算符

pow(a, ++i);
Run Code Online (Sandbox Code Playgroud)

并且您将获得预期的结果,因为运算符的值是其增量后的操作数的值.

考虑到主要应具有返回类型int.

一般情况下你的功能也是错误的.它不能应用于任何数组,因为它使用幻数10.

我会按照以下方式编写函数

void pow( int a[], int n )
{
    if ( n > 0 )
    {
        printf( "%d\n", a[0] * a[0] );
        pow( a + 1, n - 1 );
    }
}
Run Code Online (Sandbox Code Playgroud)

并称之为

pow( a, 10 );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它可以与具有不同大小的阵列一起使用.