[英]Where do I declare x and y to make this c code work?
我有:
#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未聲明? 任何幫助,不勝感激。 謝謝
在求和調用之前聲明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撰寫的“ C編程語言”是一個很好的起點。
變量是您按名稱引用的內存塊。 它們在您的程序生命周期內可以具有任何值(其類型)-因此稱為“變量”。 必須在使用它們之前聲明它們; 您可以通過告訴編譯器其類型和名稱來做到這一點。 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變成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變量僅作為參數傳遞給函數。 您將無法在主要功能中引用這些內容。 如果您願意,它將是這樣的:
#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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.