Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Понятие структуры




Структуры данных

Пример 5.

Следующая программ выделяет память для хранения массива из 1000 целочисленных значений. Затем она заносит в массив значения от 1 до 1000, выводя их на экран. Потом программа освобождает эту память и распределяет память для массива из 2000 значений с плавающей точкой, занося в массив значения от 1.0 до 2000.0:

#include "stdafx.h"

#include <iostream>

using namespace std;

const int n=10;

int main()

{

float *array2;

int *array1 = new int[n];

int i;

if (array1!=NULL)

{

for (i = 0; i < n; i++)

array1[i]=i+1;

for (i = 0; i < n; i++)

cout<<array1[i]<<' ';

delete array1;

}

 

cout <<endl;

array2=new float[2*n];

if (array2!= NULL)

{

for (i = 0; i < 2*n; i++)

array2[i]=(i+1)*1.0;

for (i = 0; i < 2*n; i++)

cout << array2[i] << ' ';

delete array2;

}

cout <<endl;

return 0;

 

}

Как правило, ваша программа должна освобождать память с помощью оператора delete по мере того, как память становится ей не нужной.

Выводы:

1. Способность выделять память динамически во время выполнения снимает с ваших программ зависимость от фиксированных размеров массивов.

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

3. Если оператор new не может выделить требуемую вашей программой память, он возвращает NULL-указатель, который содержит значение 0.

4. Каждый раз, когда ваша программа распределяет память динамически с использованием оператора new, она должна проверять значение возвращаемого оператором new указателя, чтобы определить, не равен ли он NULL, что указывает на невозможность выделения памяти.

5. Используя указатель на массив, ваша программа может обращаться к памяти, выделенной с помощью оператора new.

6. Оператор new выделяет память из блока неиспользуемой памяти, называемой свободной памятью.

7. В зависимости от вашей операционной системы и модели памяти компилятора размер свободной памяти может быть различным. В среде MS-DOS свободная память может быть ограничена 64 Кбайт.

8. Если вашей программе больше не нужна выделенная память, она должна освободить ее (вернуть в свободную память), используя оператор delete.

Очень часто при обработке информации приходится работать с блоками данных, в которых присутствуют разные типы данных. Например, информация о книге в каталоге библиотеки включает в себя автора, название книги, год издания, количество страниц и т.п.

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

В современных языках программирования существует особый тип данных, который может включать в себя несколько элементов более простых (причем разных!) типов.

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

В общем случае при работе со структурами следует выделить четыре момента:

- объявление и определение типа структуры,

- объявление структурной переменной,

- инициализация структурной переменной,

- использование структурной переменной.

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

Андреева С.В. 4 5 5

Данная структура состоит из четырех полей: одно поле - строка (ФИО студента) и три числовых поля (оценки студента по предметам).

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

struct Имя

{

<тип> <имя 1-го поля>;

<тип> <имя 2-го поля>;

…………

<тип> <имя последнего поля>;

};

Например, задание типа записи строки экзаменационной ведомости выглядит следующим образом:

struct student

{

char fam[20];

int mathematics, informatics, history;

};

Тогда при описании переменных можно использовать этот тип:

struct student X;

Здесь X - переменная типа структура; struct student - тип; fam, mathematics, informatics, history - поля структуры.

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

Чтобы упростить обращение к структурному типу, можно воспользоваться директивой #define.

Например, для предыдущей структуры:

#define stud struct student

stud

{

char fam[20];

int mathematics, informatics, history;

};

 

Теперь идентификатор stud заменит в любом месте программы громоздкий тип struct student.

Теперь описании переменной типа структура будет выглядеть так:

stud X;

В более поздних версиях языка С ключевое слово typedef позволяет в программе создать синоним типа, который удобно использовать для объявления переменных структурного типа. Например:

typedef struct student

{

char fam[20];

int mathematics, informatics, history;

} STUD;

Идентификатор STUD представляет собой синоним типа struct student. С помощью синонима STUD можно объявить переменную:

STUD X;

Для обращения к отдельным полям переменной типа структура используется составное имя:

<имя переменной>.<имя поля>

Например, для переменной X обращения к полям записываются следующим образом:

X.fam, X. mathematics, X. informatics, X. history.

При размещении в памяти структурной переменной можно выполнить ее инициализацию. Неявная инициализация производится для глобальных переменных, переменных класса static. Структурную переменную можно инициализировать явно при объявлении, формируя список инициализации в виде константных выражений.

Формат: struct Имя переменная ={значение1, … значениеN};

Внутри фигурных скобок указываются значения полей структуры, например:

struct student X={"Андреева С.В.", 4, 5, 5};

при этом первое значение записывается в первое поле, второе значение – во второе поле и т. д., а сами значения должны иметь тип, совместимый с типом поля.




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


Дата добавления: 2014-12-26; Просмотров: 361; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.