2017-02-22 7 views
1

Для проекта класса, который я пишу, руководство по стилю моего учителя для функций говорит, что «входные параметры должны отображаться перед параметрами». Я не слишком уверен, что они подразумевают под этим?C параметры ввода и вывода функции

+0

В '(a, b)' 'a' появляется перед' b'. –

+0

'int func (int input, int * output)' –

ответ

4

Если у меня есть функция

void foo(int a, int b, int* c) 
{ 
    *c = a+b; 
} 

В приведенном выше случае, а и б являются входами, а с вл етс выходом.

Как правило, вы используете «выходы» таким образом, если вы возвращаете массив.

+0

Спасибо! Есть ли у вас какие-либо рекомендации относительно порядка примитивных переменных и указателей/массивов (порядок сортировки ввода/вывода)? – user7252850

+0

Независимо от того, что имеет смысл, когда вы заявляете, что он работает лучше всего. Группировка параметров по типу не имеет смысла. – AntonH

1

C фактически не имеет параметров «ввода» и «выхода», по крайней мере, не напрямую. (Некоторые языки делают.) Все аргументы передаются по значению, что означает, что функция получает значение аргумента, но любые изменения параметра невидимы для вызывающего.

(Терминология: А * Параметр»представляет собой именованный объект в теле функции, определенные в скобках; аргумент это выражение в вызове функции Каждый аргумент вычисляется и полученное значение присваивается. . соответствующий параметр)

Тем не менее, вы можете имитировать «выходные» параметры с использованием указателей, например:.

void foo(int in, int *out); 

указатель передаются по значению, но функция может присвоить значение с помощью указателя до *out, который будет виден вызывающему. (out также может использоваться в качестве входного параметра, который является общим для больших типов, где передача указателя более эффективна или как параметр ввода/вывода.)

Таким образом, «входные параметры должны отображаться перед параметрами», вероятно, означает что параметры указателя не должны отображаться перед параметрами указателя, используемыми для косвенного возврата значений.

1

Это обычно для void функции.

void some_function (int input_1, int input_2, char* output) 
{ 
    /* Do things with input_1 and input_2. */ 

    /* Modify "output". */ 
} 

Код я просто дал очень неопределенными, и параметры ввода/вывода в зависимости пористости могут быть применены во многих отношениях.

+0

Очень верно. Я отредактирую свой ответ соответственно. Большинство людей изменяют параметры, используя функции void, поэтому я, возможно, не обратил внимания на это. – moosefoot

Смежные вопросы