Студопедия

КАТЕГОРИИ:


Архитектура-(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, может быть использована для работы с данными любого типа. Но для того, чтобы оперировать бестиповым указателем или данными, которые он адресует, необходимо явно указать требуемый тип в каждой операции с таким указателем. Это можно сделать с помощью операции приведения типа:

int a = 125;

double d = 10.3975;

short b[4] = {0, 1, 2, 3};

void *vp;

...

vp = &a;

cout << *(int*)vp << endl; // Вывод значения переменной a

vp = &d;

cout << *(double*)vp << endl; // Вывод значения переменной d

vp = b;

cout << *((short*)vp+1) << endl; // Вывод значения b[1]

vp = (short*)vp+2; // Изменение значения vp

cout << *(short*)vp << endl; // Вывод значения b[2]

Переменная vp объявлена как бестиповый указатель, поэтому ей можно присвоить адрес переменной любого типа. Однако ни одна операция не может быть выполнена над бестиповым указателем до тех пор, пока не будет явно задан тип данных, на кото­рый он указывает. В примере указатель vp с помощью операции приведения типа преобразуется к типам int*, double* и short*.

Указатели, как и любые другие данные одного и того же типа, могут объединяться в массивы. Массивы указателей можно использовать для работы со всеми типами данных, но целесообразнее применять их для хранения символьных строк.

Объявление

char *ch[10];

означает, что ch – одномерный массив из 10 элементов, являющихся указателями на данные типа char.

Определить и инициализировать массив строк (массив указателей на данные типа char) можно, например, с помощью объявления

char* s[5] = { "one", "two", "three", "four", "five" };

или равнозначного ему

char* s[] = { "one", "two", "three", "four", "five" };

Оба приведенных в примере объявления создают массив указателей s и инициализируют его элементы адресами константных строк. Так как s – массив, указатель s будет содержать адрес начального элемента этого массива, в данном случае – указателя s[0], а каждый из указателей s[0], …, s[4] – адрес начала соответствующей строки. Соответственно, *s, как и s[0], будет означать адрес начала первой по счету строки массива s, а s[0][0], *s[0] (приоритет операции [] выше, чем приоритет операции *) и **s – значение ее начального символа.




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


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


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



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




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