我有:
#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 未声明?非常感谢任何帮助。谢谢
我有:
#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 未声明?非常感谢任何帮助。谢谢
在调用 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 );
}
在第三行中,您所做的就是声明一个函数,该函数sum
接受两个参数,都是整数,称为x
和y
。您还没有声明任何变量。这些参数只能在函数本身内部引用。下面是在这个阶段对你有帮助的简化,但你应该尝试阅读一本基本的编程书籍。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
通过传入值来调用。实际上,编译器用您传入的值替换x
和y
在您的函数中。在您的情况下,您传递的是文字:10 和 11。当程序到达对 的调用时sum
,参数x
和y
取值 10 和 11 ,所以返回return 10 + 11;
当然是 21。
请记住,参数 x
只y
存在于该函数中。你只能在你的函数中引用它们。为什么?因为每对花括号都{
定义}
了一个范围,而在该范围内声明的任何内容都只能在该范围内使用。这包括变量和参数。
所以,这里有一个更完整的例子。我更改了字母,以便您可以看到使用变量和参数的不同方式:
#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;
}
您必须在 main 中声明 x 和 y,以便调用 sum(x,y) 而不是在 2 个文字上调用它。目前,x 和 y 仅在函数 sum 中定义。
不,你没有。您刚刚告诉编译器该函数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;
}
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;
}
这应该有效。我希望这有帮助!
在main
你的声明中,你既不是x
也不是——你y
只是传入了字面值 10 和 11。在sum
方法的范围之外,这两个名称都没有任何意义。快速解决:
main()
{
int x = 10;
int y = 11;
int theSum = sum(x, y);
// etc.