УКАЗАТЕЛИ НА СТРУКТУРЫ
УКАЗАТЕЛИ НА СТРУКТУРЫ
Любители указателей будут рады узнать, что указатели можно использовать и для структур. Это хорошо по крайней мере по трем причинам. Во-первых, точно так же как указатели на массивы, они легче в использовании (скажем, в задаче сортировки), чем сами массивы, а указателями на структуры легче пользоваться, чем самими структурами. Во-вторых, структура не может использоваться в качестве аргумента функции, а указатель на структуру может. В-третьих, многие удобные представления данных являются структурами, содержащими указатели к другим структурам.
Следующий короткий пример (рис. 14.5) показывает, как определять указатель на структуру и как использовать его для получения элементов структуры.
/* указатель на структуру */
#define LEN 20 struct names {
char first [LEN];
char last [LEN]; };
struct guy {
struct names handle;
char favfood [LEN];
char job [LEN];
float income; };
main( ) {
static struct guy fellow [2] = {
{ "Франко", "Уотэл" }
"баклажан",
" вязальщик половиков ",
15435.00},
{{"Родней", "Свилбели" },
"лососевый мусс", "декоратор интерьера",
35000.00 } };
struct guy *him; /* ЭТО - - указатель па структуру */
printf("адрес #1: %u #2 : %u ", &fellow[0],
&fellow[1]);
him = &fellow[0]; /* сообщает указателю, на что ссылаться */
printf("указатель #1: %u #2: %u ", him, him + 1);
printf("him -> доход $ %.2f: (*him).доход $ %.2f ",
him -> доход, (*him).доход);
him++; /* указывает на следующую структуру */
printf("him -> favfood is %s : him -> names.last is %s ",
him-> favfood, him -> handle.last);}
РИС. 14.5. Программа с использованием указателя на структуру.
Вот, пожалуйста, ее выход:
адрес #1: 12 #2: 96
указатель #1: 12 #2: 96
him -> доход $15435.00: (*him).доход $15435.00
him -> favfood лососевый мусс: him -> names.last
- Свилбели
Сначала посмотрим, как мы создали указатель на структуру guy. Затем научимся определять отдельные элементы структуры при помощи указателей.