Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
114-124!!!.docx
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
53.35 Кб
Скачать

Описание и инициализация указателя на структуру.

Вот самое простое описание, какое только может быть:

structguy *him;

Первым стоит ключевое слово struct, затем слово guy, являющееся именем структурного шаблона, далее * и за нею имя указателя. Синтаксис тот же, как для описаний других указателей, которые мы видели.

при инициализации адреса используют операцию получения адреса:

him = &fellow[0];

Доступ к элементу структуры при помощи указателя.

Первый способ, наиболее общий, использует новую операцию - >.

him - >income — этоfellow[0].income, еслиhim = &fellow[0]

Другими словами, структурный указатель, за которым следует операция - >, работает так же, как имя структуры с последующей операцией ".".

him — указатель, а him - >income — элемент структуры, на которую делается ссылка. Второй способ определения значения элемента структуры вытекает из последовательности:

если him == &fellow[0], то *him == fellow[0].

Это так, поскольку & и * — взаимообратные операции.

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

  1. Передача информации о структурах функциям. Использование элементов структуры.

аргументы функции передают значения в функцию. Структура гораздо сложнее, чем отдельная переменная, поэтому неудивительно, что саму структуру нельзя использовать в качестве аргумента функции. (Это ограничение снято в некоторых новых реализациях.)

Однако есть способы ввести информацию о структуре внутрь функции.

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

Поскольку элемент структуры является переменной с единственным значением (т. е. типа int или одного из его «родственников» — char, float, double или указатель), он может быть передан как аргумент функции. Простая программа финансовых расчетов, которая прибавляет взнос клиента к его счету, иллюстрирует этот способ. Заметим, между прочим, что мы объединили определение шаблона, описание переменной и инициализацию в один оператор.

/* передача элементов структуры как аргументов функции */

(пример нужен наверное)

#include<stdio.h>

struct funds {

char *bank;

floatbankfund;

char *save;

floatsavefund; } stan = {

"Senior tomatoes Bank",

1023.43,

"Savings and lendings of Snoopy",

4239.87

};

float sum(float x, float y);

void main()

{

float total;

extern struct funds stan; /* необязательное описание */

total=sum(stan.bankfund, stan.savefund);

printf ("Stan has only %.2f dollars.\n", total);

}

/* складывает два числа типа float */

float sum(float x, float y)

{

returnx+y;

}

Конечно, если вы хотите, чтобы программа воздействовала на значение элемента в вызывающей программе, можно передать ей адрес этого элемента:

modify(&stan.bankfund);

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

аргументы функции передают значения в функцию. Структура гораздо сложнее, чем отдельная переменная, поэтому неудивительно, что саму структуру нельзя использовать в качестве аргумента функции. (Это ограничение снято в некоторых новых реализациях.)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]