以下代码的输出是什么?

时间:2014-09-28 10:51:13

标签: c compiler-errors output

main()
{

    int a[ ] = { 2, 4, 6, 8, 10 } ;
    int i ;
    change (a, 5 ) ;
    for ( i = 0 ; i <= 4 ; i++ )
    {
        printf( "\n%d", a[i] ) ;
    }
}
change ( int *b, int n )
{
    int i ;
    for ( i = 0 ; i < n ; i++ )
        *( b + i ) = *( b + i ) + 5 ;
}

我无法计算上述代码的输出。在http://www.compileonline.com/compile_c_online.php上编译程序时显示的问题在于change()函数的定义。 发现错误:错误:更改前的预期表达式(int * b,int n)。我没有得到这是什么意思。它需要什么表达方式。如果b是指针(它的地址是a),那么我们如何通过添加i来更改其地址值。

3 个答案:

答案 0 :(得分:3)

您无法在C中嵌套函数。将change函数的定义移到main函数之外。

现代C还要求您在函数声明中指定返回类型,例如: g。,int main(void)void change (int *b, int n)

编辑:问题已修改,现在change功能已不再嵌套。现在OP在change函数之前需要main的函数声明。

答案 1 :(得分:1)

理想情况下,您不应在main()中定义您的功能。但是,如果这样做,首先定义它然后使用它。 此外,change函数的返回类型应为void,因为此函数未返回任何内容,如果您未指定返回类型,则默认值为int

change ( int *b, int n )更改为void change ( int *b, int n )

答案 2 :(得分:1)

你的代码应该是这样的:这里你只是为数组a的每个值加5。此处a是引用类型,因此在外部进行的任何更改都将反映原始值的含义。

  #include<stdio.h>
  int  change ( int *b, int n )
  { 
            int i ;
            for ( i = 0 ; i < n ; i++ )
            *( b + i ) = *( b + i ) + 5 ;
  }
  int main()
  {   

        int a[ ] = { 2, 4, 6, 8, 10 } ;
        int i ; 
        change (a, 5 ) ; 
        for ( i = 0 ; i <= 4 ; i++ )
        {
            printf( "\n%d", a[i] ) ;
        }

   }

输出:

7
9
11
13
15