Информатика и технология программирования

       

Структура как базовый тип данных


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



- операция ПРИСВАИВАНИЯ СТРУКТУРИРОВАННЫХ
ПЕРЕМЕННЫХ производит побайтное копирование одной структуры в другую. Присваивание возможно также при косвенном обращении по указателю на структуру;



- ФОРМАЛЬНЫЙ ПАРАМЕТР СТРУКТУРИРОВАННАЯ ПЕРЕМЕННАЯ : имеет место
способ передачи параметра по значению: в стеке резервируется место для размещения структуры -формального параметра и производится присваивание ей значения фактического параметра (копирование);



- РЕЗУЛЬТАТ ФУНКЦИИ СТРУКТУРИРОВАННАЯ ПЕРЕМЕННАЯ : при выполнении оператора return в такой функции значение операнда -структуры присваивается структурированной переменной, использующей результат функции. При отсутствии непосредственного присваивания результата транслятор создает неявную автоматическую структурированную переменную , в которой временно его сохраняет. Функция, возвращающая структуру в качестве результата, может иметь неявный параметр -адрес размещения результата (указатель);



-в обозначении типа данных -структуры служебное слово struct можно опускать.

В приведенном примере все механизмы передачи параметров и результата интерпретируются средствами " классического" Си:

.


struct dat { int day,month,year; };
//-------------------------------------------------------


// Си++ Эквивалент в "классическом" Си


//-------------------------------------------------------


dat COPY(dat x) void COPY(dat *ret, dat x)
{ {
return(x); *ret = x;
}; };
void main() void main()
{ {
dat a1,a2,a3,*p; dat a1,a2,a3,*p;
//----- Прямое присваивание структур -----------------


a1 = a2; a1 = a2;
//----- Присваивание структур косвенно по указателю --


p = &#38a3; p = &#38a3;
*p = a2; *p = a2;
//----- Прямое присваивание результата - структуры ---


a1 = COPY(a2); a2 = x;
ret = &#38a1;
*ret = x;
//----- Неявная структурированная переменная ---------


a1 = COPY(COPY(a2)); dat dummy;
x = a2;
ret = &#38dummy;
*ret = x;
x = dummy;
ret = &#38a1;
*ret = x;
} }



Содержание раздела