Книга: Язык Си - руководство для начинающих
Структуры в качестве аргументов функции
Структуры в качестве аргументов функции
В не расширенном языке Си можно передавать функции адрес структуры. Например, если 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);
В этом случае передается адрес, и функция работает с самой исходной структурной переменной, а не с ее копией.
- Аргументы функции в Python
- 3. Функции
- Новые функции API для работы с Blob и массивами
- 1.4 Структуры данных, связанные с драйверами устройств Windows
- Математические функции
- Размытые функции
- 7.3. Финансовые функции
- 4.3. Логические функции и таблицы истинности
- B1.7. Функции обработки ошибок
- 9.1.4.2. Функции-оболочки: execl() и др.
- 11.5. Функции getservbyname и getservbyport
- Функции dup(2) и dup2(2)