0

我有:

 #include <stdio.h>

 int sum ( int x, int y );

 main ()
 {
 int theSum = sum (10, 11);
 printf ( "Sum of %i and %i is: %i\n", x, y, theSum );
 }

 int sum ( int x, int y )
 {
 return x + y;
 }

但是,当我编译并运行它说 x 和 y 未声明?非常感谢任何帮助。谢谢

4

6 回答 6

2

在调用 sum 之前声明 x 和 y:

main ()
{
int x = 10;
int y = 11;
int theSum = sum (x, y);
 printf ( "Sum of %i and %i is: %i\n", x, y, theSum );
 }
于 2011-12-20T16:17:09.193 回答
2

在第三行中,您所做的就是声明一个函数,该函数sum接受两个参数,都是整数,称为xy。您还没有声明任何变量。这些参数只能在函数本身内部引用。下面是在这个阶段对你有帮助的简化,但你应该尝试阅读一本基本的编程书籍。Kernighan 和 Ritchie 的“The C Programming Language”是一个很好的起点。

变量是您按名称引用的内存块。在程序的生命周期中,它们可以取任何值(它们的类型) - 因此名称为“变量”。必须在使用前声明它们;你通过告诉编译器他们的类型和他们的名字来做到这一点。int a意思是'为我保留一块足够大的内存来容纳任何整数,让我稍后用它的名字来引用它a'。你可以给它赋值:a = 10你可以使用它:a + 20

您需要了解参数和变量之间的区别才能了解这里发生了什么。函数的参数基本上是仅在该函数生命周期内存在的变量。这sum又是你的:

int sum(int x, int y) {
    return x + y;
}

注意顶行看起来就像一个变量声明int x。那是因为它是。x并且y是您可以在函数中使用的变量。

sum通过传入值来调用。实际上,编译器用您传入的值替换xy在您的函数中。在您的情况下,您传递的是文字:10 和 11。当程序到达对 的调用时sum,参数xy取值 10 和 11 ,所以返回return 10 + 11;当然是 21。

请记住,参数 xy存在于该函数中。你只能在你的函数中引用它们。为什么?因为每对花括号都{定义}了一个范围,而在该范围内声明的任何内容都只能在该范围内使用。这包括变量和参数。

所以,这里有一个更完整的例子。我更改了字母,以便您可以看到使用变量和参数的不同方式:

#include <stdio.h>

int sum ( int x, int y );

main ()
{
   /* We declare our variables */
   int a;
   int b;

   /* We assign values to them */
   a = 10;
   b = 11;

   /* We pass them as parameters to your sum function */
   int theSum = sum (a, b);
   /* And we use them as parameters again, in a call to the printf function */
   printf ( "Sum of %i and %i is: %i\n", a, b, theSum );
}

int sum ( int x, int y )
{
   return x + y;
}
于 2011-12-20T16:18:35.403 回答
1

您必须在 main 中声明 x 和 y,以便调用 sum(x,y) 而不是在 2 个文字上调用它。目前,x 和 y 仅在函数 sum 中定义。

于 2011-12-20T16:15:59.340 回答
1

不,你没有。您刚刚告诉编译器该函数sum需要两个整数。你可以写成

 int sum ( int , int );

因此你应该写:

 #include <stdio.h>

 int sum ( int , int );

main ()
 {
     int x = 10;
     int y = 11;
     int theSum = sum (x, y);
     printf ( "Sum of %i and %i is: %i\n", x, y, theSum );
 }

 int sum ( int x, int y )
 {
 return x + y;
 }
于 2011-12-20T16:18:50.100 回答
0

x 和 y 变量仅作为参数传递给函数。您将无法在 main 函数中引用它们。如果你愿意,它会是这样的:

#include <stdio.h>

int sum ( int x, int y );

main ()
{
    int x = 10;
    int y = 11;
    int theSum = sum (x, y);
    printf ( "Sum of %i and %i is: %i\n", x, y, theSum );
}

int sum ( int x, int y )
{
    return x + y;
}

这应该有效。我希望这有帮助!

于 2011-12-20T16:17:04.683 回答
0

main你的声明中,你既不是x也不是——你y只是传入了字面值 10 和 11。在sum方法的范围之外,这两个名称都没有任何意义。快速解决:

main()
{
    int x = 10;
    int y = 11;
    int theSum = sum(x, y);
    // etc.
于 2011-12-20T16:17:56.853 回答