Member 13459140 Ответов: 1

Как объявляются параметры?


В основном я новичок в программировании на c++. Я столкнулся с проблемой функции, которую не могу понять.Я даю код ниже....
#include <stdio.h>
int test_function(int x)
{
int y = x;
x = 2 * y;
return (x * y);
}
int main()
{
int x = 10, y = 20, z = 30;
z = test_function(x);
printf("%d %d %d\n", x, y, z);
return 0;
}


мой реальный вопрос заключается в том, почему параметр имеет значение только (int x)? и когда я ставлю int y
он говорит: "y объявлен как другой вид символа"
и когда я помещаю int z в параметр, он говорит: "слишком мало аргументов для функции 'test_function'"

Что я уже пробовал:

#include <stdio.h>
int test_function(int x,int y)
{
int y = x;
x = 2 * y;
return (x * y);
}
int main()
{
int x = 10, y = 20, z = 30;
z = test_function(x);
printf("%d %d %d\n", x, y, z);
return 0;
}

1 Ответов

Рейтинг:
2

OriginalGriff

Когда вы определяете функцию, вы создаете подпись для него: параметры, которые ему нужно задать для работы, и тип значения, которое он возвращает в ваш код.
В вашем первом фрагменте кода, test_function объявляется как имеющая сигнатуру принятия одного целочисленного параметра и возвращающая целочисленное значение.
Поэтому, когда вы вызываете его, вы правильно предоставляете один параметр и используете результат:

z = test_function(x);
Вы передаете значение x (не саму переменную-C всегда передает значения, а не ссылки, но не беспокойтесь об этом ни на минуту) и возвращаете его, умноженное на себя и два.
Таким образом, вы можете поставить значение десять, и оно вернет 200.

Ваша вторая версия переопределяет test_function с другой сигнатурой: теперь он ожидает, что ему будут переданы два целых числа, и все равно возвращает одно целое значение.
Но когда вы пытаетесь вызвать функцию:
z = test_function(x);
Вы вводите только один параметр, поэтому система не знает, что делать, и выдает ошибку.
Если вы хотите использовать эту подпись, вам нужно передать два параметра:
z = test_function(x, y);

Но даже тогда ваш код, как показано на рисунке, не будет работать:
int test_function(int x, int y)
    {
    int y = x;
    x = 2 * y;
    return (x * y);
    }
Потому что определение нового y внутри тела функции "скрывается" версия, которую вы сказали ей ожидать в качестве параметра, и она на самом деле не уверена, какую именно вы хотели использовать.

Попробовать это:
int test_function(int x, int y)
    {
    int y2 = x;
    x = 2 * y;
    return (x * y2);
    }
И
z = test_function(x, y);
и он должен правильно компилироваться.

Обратите внимание, что имена переменных в одной функции не имеют никакого отношения к переменным в другой: вы можете написать свою функцию так:
int test_function(int a, int b)
    {
    int c = a;
    a = 2 * b;
    return (a * c);
    }
И это работает точно так же, потому что имена "x" и "y" не передаются при вызове функции, а только содержащиеся в них значения. Переменные не могут быть доступны непосредственно вне функции, в которой они объявлены, если только они не используются для передачи значения другой функции или не возвращаются вызывающему.


Maciej Los

5ед!