Для проекта класса, который я пишу, руководство по стилю моего учителя для функций говорит, что «входные параметры должны отображаться перед параметрами». Я не слишком уверен, что они подразумевают под этим?C параметры ввода и вывода функции
ответ
Если у меня есть функция
void foo(int a, int b, int* c)
{
*c = a+b;
}
В приведенном выше случае, а и б являются входами, а с вл етс выходом.
Как правило, вы используете «выходы» таким образом, если вы возвращаете массив.
Спасибо! Есть ли у вас какие-либо рекомендации относительно порядка примитивных переменных и указателей/массивов (порядок сортировки ввода/вывода)? – user7252850
Независимо от того, что имеет смысл, когда вы заявляете, что он работает лучше всего. Группировка параметров по типу не имеет смысла. – AntonH
C фактически не имеет параметров «ввода» и «выхода», по крайней мере, не напрямую. (Некоторые языки делают.) Все аргументы передаются по значению, что означает, что функция получает значение аргумента, но любые изменения параметра невидимы для вызывающего.
(Терминология: А * Параметр»представляет собой именованный объект в теле функции, определенные в скобках; аргумент это выражение в вызове функции Каждый аргумент вычисляется и полученное значение присваивается. . соответствующий параметр)
Тем не менее, вы можете имитировать «выходные» параметры с использованием указателей, например:.
void foo(int in, int *out);
указатель передаются по значению, но функция может присвоить значение с помощью указателя до *out
, который будет виден вызывающему. (out
также может использоваться в качестве входного параметра, который является общим для больших типов, где передача указателя более эффективна или как параметр ввода/вывода.)
Таким образом, «входные параметры должны отображаться перед параметрами», вероятно, означает что параметры указателя не должны отображаться перед параметрами указателя, используемыми для косвенного возврата значений.
Это обычно для void
функции.
void some_function (int input_1, int input_2, char* output)
{
/* Do things with input_1 and input_2. */
/* Modify "output". */
}
Код я просто дал очень неопределенными, и параметры ввода/вывода в зависимости пористости могут быть применены во многих отношениях.
Очень верно. Я отредактирую свой ответ соответственно. Большинство людей изменяют параметры, используя функции void, поэтому я, возможно, не обратил внимания на это. – moosefoot
В '(a, b)' 'a' появляется перед' b'. –
'int func (int input, int * output)' –