Структуры в качестве аргументов функции

Структуры в качестве аргументов функции

В не расширенном языке Си можно передавать функции адрес структуры. Например, если montana является структурной переменной структурного типа player, мы можем обратиться к функции следующим образом:

stats(&montana);

Функция stats( ) будет иметь примерно такой заголовок:

stat(name) struct player * name;

После вызова функции указатель name будет ссылаться на структуру montana и функция будет использовать montana в своих манипуляциях.

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

stats(montana);

Теперь функция stats( ) должна иметь несколько иной заголовок:

stats(name) struct player name;

На этот раз после вызова функции создается новая структурная переменная типа player. Новая переменная получает название name, и каждый элемент name имеет такое же значение, как и соответствующий элемент структуры montana.

Это расширение позволяет функции иметь свою "личную" копию структуры точно так же, как она обычно имеет свои копии стандартных переменных. Преимущество здесь то же, что и раньше: структуры не изменяются необъяснимо из-за непредвиденного побочного воздействия функции.

Будьте осторожны: Некоторые компиляторы допускают обращение вида

stats(montana);

но на самом деле интерпретируют его как

stats(&montana);

В этом случае передается адрес, и функция работает с самой исходной структурной переменной, а не с ее копией. 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Передача аргументов

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Передача аргументов Один из аспектов нотации требует разъяснений: что происходит со значениями, переданными в качестве аргументов подпрограмме?Рассмотрим вызов в формеr (a1, a2, ..., an)соответствующий программеr (x1: T1, x2: T2, ..., xn: Tn) is ...где r может быть как функцией, так и


31. Не пишите код, который зависит от порядка вычислений аргументов функции

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

31. Не пишите код, который зависит от порядка вычислений аргументов функции РезюмеПорядок вычисления аргументов функции не определен, поэтому никогда не полагайтесь на то, что аргументы будут вычисляться в той или иной очередности.ОбсуждениеНа начальных этапах развития


88. В качестве аргументов алгоритмов и компараторов лучше использовать функциональные объекты, а не функции

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

88. В качестве аргументов алгоритмов и компараторов лучше использовать функциональные объекты, а не функции РезюмеПредпочтительно передавать алгоритмам функциональные объекты, а не функции, а компараторы ассоциативных контейнеров просто должны быть функциональными


26.7. Обработка дополнительных аргументов

Из книги VBA для чайников автора Каммингс Стив

26.7. Обработка дополнительных аргументов Некоторые приложения реализуют эквивалент псевдонимов параметров, однако для этого им необходима специальная логика. Функция poptStuffArgs() позволяет приложению вставлять новые аргументы в текущую структуру poptContext.#include <popt.h>int


Получение списка аргументов

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Получение списка аргументов Многие VBA-процедуры требуют, чтобы при их выполнении были определены один или несколько аргументов. Такие процедуры используют в своих вычислениях (или других выполняемых ими действиях) информацию, содержащуюся в этих аргументах. Подобно


Вызов функции с переменным числом аргументов

Из книги Краткое введение в программирование на Bash автора Родригес Гарольд

Вызов функции с переменным числом аргументов Для вызова функции с переменным числом аргументов не требуется никаких специальных действий: в вызове функции просто задается то число аргументов, которое нужно. В предварительном объявлении (если оно есть) переменное число


Функции работы со списком аргументов

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Функции работы со списком аргументов Функция Краткое описание va_arg выбрать аргумент из списка va_end переустановить указатель va_start установить указатель на начало списка аргументов Эти макроопределения дают возможность получить доступ к аргументам функции, когда


Использование аргументов

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Использование аргументов Возможно, вы уже заметили, что большинство программ в Linux не интерактивны. Вы должны указать им какие-то параметры, в противном случае вы получите сообщение со списком возможных аргументов. Возьмем, к примеру, команду more. Если вы не укажете имя


Наличие нескольких аргументов

Из книги C++ для начинающих автора Липпман Стенли

Наличие нескольких аргументов      Если для связи с некоторой функцией требуется более одного аргумента, то наряду с именем функции можно задавать список аргументов, разделенных запятыми, как показано ниже. printnum(i,j) int i, j;{ printf(" Новых точек = %d. Всего точек = %d. ", i, j); }     Мы


2.1.1. Список аргументов

Из книги автора

2.1.1. Список аргументов Для запуска программы достаточно ввести ее имя в командной строке. Дополнительные информационные элементы, передаваемые программе, также задаются в командной строке и отделяются от имени программы и друг от друга пробелами. Такие элементы


10.4. Явное задание аргументов шаблона A

Из книги автора

10.4. Явное задание аргументов шаблона A В некоторых ситуациях автоматически вывести типы аргументов шаблона невозможно. Как мы видели на примере шаблона функции min5(), если процесс вывода дает два различных типа для одного и того же параметра шаблона, то компилятор