Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Передача структуры в функцию




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

 

struct funds{

char* bank;

float fonds;

char* name;

float savef;

}stan={"ПРБ", 1023.87, «Иванов И.И.», 123,45};

float sum (float, float);

void main(void){

printf ("У Иванова И.И.всего %.2f рубл.\n", sum(stan.fonds,stan.savef));

}

float sum(float x, float y){

return(x+y);

}

 

Функция sum() не знает, что ей передается элементы структуры, важно, что они имеют тип float.

 

2. Если нужно, чтобы она воздействовала на элемент структуры, то нужно передвать адрес элемента и далее работать через указатель определенного типа.

modify(&stan.savef);

 

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

 

struct funds {...} stan={...};

void main(void){

float sum (struct funds*);

printf ("У Иванова И.И. %.2f рублей\n", sum(&stan));

}

float sum (stuct funds* money){

return(money->fonds+money->savef);

}

 

Указатель money ссылается на структуру funds. В отличие от массива имя структуры не является её адресом, поэтому указываем адрес &stan.

 

4. Имеется массив структур. В этом случае имя массива является его адресом.

 

struct funds {...}stans[2]={{...},{...}};

void main(void){

float sum (struct funds*);

printf ("Всего капитала %.2f рублей\n", sum(stans));

}

float sum(struct funds* money){

float summ;

int i;

for (i=0, summ=0;i<2; i++, money++)

summ+=money->fonds+money->savef;

return (summ);

}

money <=> &stan[0]; увеличивается money++, ссылаемся на stan[1].

 

Пример 1. Определить номер дня в году.

struct date { int day; int month;

int year; int yearday;}d={25,3,1999};

int date_tab[2][13]={{ 0,31,28,31,30,31,30,31,31,30,31,30,31},

{ 0,31,29,31,30,31,30,31,31,30,31,30,31}};

int day_of_year(struct date *pd) {

int i, day, l=0;

day = pd->day;

if(pd->year%4==0&&pd->year%100!=0||pd->year%400==0) //год высок.

l=1;

for(i=0; i< pd->month; i++)

day+=date_tab[l][i];

return(day);

}

void main(void) {

d.yearday=day_of_year(&d); - вызов функции.

printf(“%d“, d.yearday);

}

Объединения

 

Объединения - это средство, позволяющее запоминать данные различных типов в одном и том же месте памяти. Объединение позволяет создавать массив, состоящий из элементов одинакового размера, каждый из которых может содержать различные типы данных.

Определяется также как и структура. Кючевое слово union. Есть шаблон определения и переменные этого типа.

 

union simbl {

int digit;

double bigfl;

char letter;

};

union simbl fit, save[10], *pu.

 

Компилятор выделяет память по наибольшему из элементов объединения bigfl (double 8 байт), для массива структур save[10] будет выделено (10 x 8) байт.

Как обращаться к элементу объеденения?

fit.digit=23; (использ. 2байта)

fit.bigfl=2.0 (23 стирается и записывается 2.0)

fit.letter='a' (2.0 стирается и записывается'a'в 1байт)

pu=&fit; x=pu->digit;

Все типы объединения начинаются с одного и того же адреса и в данный момент можно обратиться только к одному данному объединения.

В С++ можно создавать «безымянные» объединения. В объявлении безымянного объединения отсутствует как тег объединения, так и список объектов этого типа:

 

union {

int digit;

double bigfl;

char letter;

};

 

После появления такого объявления имена членов объединения могут использоваться подобно именам обычных переменных; при этом они все расположены в памяти, начиная с одного адреса.

digit=23;

bigfl=2.0

Безымянные объединения очень удобно использовать в качестве членов структур.

 

Синоним имени типа

 

Встречаются ситуации, когда удобно ввести синоним для имени некоторого типа.

Строится синоним имени с помощью ключевого слова typedef.

Примеры:

typedef int INT //INT-синоним типа int

INT x, y;

 

typedef unsigned size_t;

size_t x, y; //переменная типа unsigned

 

typedef char string[225];

string array; //char array[225];

 

1. Функция typedef даёт имена типам данных.

2. Выполняется компилятором.

3. Более гибка, чем #define.

 

Испоьзование типа real вместо float:

typedef float real;

real x, y[5], *px;

если определение расположено внутри функции, то область действия локальна, вне функции глобальна.

typedef char* STRING //STRING-идинтификатор указателя на тип char.

STRING name, sign; //char*name,*sign;

 





Поделиться с друзьями:


Дата добавления: 2016-11-23; Мы поможем в написании ваших работ!; просмотров: 461 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

2804 - | 2365 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.