Где я могу объявить x и y, чтобы этот код c работал? - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть:

 #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 не объявлены?Любая помощь с благодарностью.Спасибо

Ответы [ 6 ]

2 голосов
/ 20 декабря 2011

В третьей строке все, что вы сделали, это объявили функцию sum, которая принимает два параметра, оба целых числа, называемые x и y. Вы не объявили никаких переменных . На эти параметры можно ссылаться только внутри самой функции. Ниже приведено упрощение, которое поможет вам на данном этапе, но вы должны попытаться прочитать основную книгу по программированию. «Язык программирования Си» Кернигана и Ричи - прекрасное место для начала.

Переменные - это фрагменты памяти, на которые вы ссылаетесь по имени. Они могут принимать любое значение (своего типа) в течение жизни вашей программы - отсюда и название «переменная». Они должны быть объявлены, прежде чем использовать их; Вы делаете это, сообщая компилятору их тип и имя. 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 существуют только в этой функции. Вы можете ссылаться на них только в рамках своей функции. Зачем? Поскольку каждая пара фигурных скобок { и } определяет scope , и все, что объявлено в этой области, может использоваться только в этой области. Это включает в себя переменные и параметры.

Итак, вот более полный пример. Я изменил буквы, чтобы вы могли видеть различные способы использования переменных и параметров:

#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;
}
2 голосов
/ 20 декабря 2011

объявляем 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 );
 }
1 голос
/ 20 декабря 2011

Нет, у вас нет. Вы только что сказали компилятору, что функция 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;
 }
1 голос
/ 20 декабря 2011

Вы должны будете объявить x и y в main, чтобы вы вызывали sum (x, y), а не вызывали его для 2 литералов.На данный момент x и y определены только в функции sum.

0 голосов
/ 20 декабря 2011

В вашем main вы не декларируете ни x, ни y - вы просто передаете литеральные значения 10 и 11. Вне метода sum ни одно из имен не имеет никакого значения. Быстрое исправление:

main()
{
    int x = 10;
    int y = 11;
    int theSum = sum(x, y);
    // etc.
0 голосов
/ 20 декабря 2011

Переменные 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;
}

Это должно работать.Надеюсь, это поможет!

...