Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Индексирование

Массивы

Применение void

 

Ключевое слово void используется как возвращаемый тип функции, не возвращающей значения. Более важное применение void заключается в объявлении типа обобщённого указателя (generic pointer) – указателя на void, например void* gp. Такому указателю можно присвоить адрес переменой любого типа, но он не может быть разыменован. Разыменование – операция *, действующая на значение указателя (адрес) для получение того, на что он указывает. Она не будет иметь смысла при разыменовании указателя на значение void, потому что неизвестно, какого типа информация хранится по адресу указателя. Вот несколько простых примеров использования void:

void* gp; //обобщённый указатель

int* ip; //указатель на int

char* cp; //указатель на char

gp=ip; //допустимое преобразование

cp=ip; //недопустимое преобразование

*ip=15; //допустимое разыменование указателя на целое

*ip = gp; //недопустимое разыменование обобщённого указателя

ip=static_cast<int*>(gp); //допустимое преобразование

 

В основном данный тип применяется в качестве формального параметра. Например, библиотечная функция memcpy объявляется в cstring.h как

Void* memcpy (void* s1, void* s2, size_t n);

Эта функция копирует n символов из объекта, размещённого в s2, в объект, размещённый в s1. Она работает с любыми типами указателей в качестве фактических аргументов.

 

 

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

#include <iostream.h>

const int size = 5;

int main ()

{

int a [size]; //резервируем место для a [0], …, a [4]

int i, sum =0;

for (i = 0; i < size; ++i) {

a [i] = i *i;

cout << “a [“ << i << “] = ” << a [i] << “ “;

sum += a [i];

}

cout << “ \nсумма = “ << sum << endl;

}

Результат этой программы выглядит так:

a [0] = 0 a [1] = 1 a [2] = 4 a [3] = 9 a [4] = 16

sum = 30

Вышеприведённому массиву требуется память для хранения пяти целых значений. Так если a [0] хранится по адресу 1000, то в системе, отводящей для хранения целого 4 байта, остальные элементы массива последовательно размещаются по адресам 1004, 1008, 1012 и 1016. Считается хорошей привычкой определять размер массива как символическую константу. Поскольку большая часть кода может зависеть от этого значения, удобно иметь возможность изменять единственную строчку #define для обработки массивов различного размера.

Предположим, было сделано объявление вида:

Int i, a[размер];

Тогда для доступа к элементу массива можно написать: a[i]. В более общем случае эта запись выглядит так: a[ выражение ], где выражение – это целое выражение. Указанное выражение называют индексом (subscript или index) элемента массива а. В С++ значение индекса должно лежать в диапазоне от 0 до размер-1.

<== предыдущая лекция | следующая лекция ==>
Указатели | Многомерные массивы
Поделиться с друзьями:


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


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



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




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