Студопедия

КАТЕГОРИИ:


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

Преобразование указателей




Связь указателей и строк

Поскольку строка – разновидность массива, между строками и указателями существует та же взаимосвязь: имя строки – это константный указатель на значение типа char. При инициализации указателей на тип char часто используются строковые константы. Все строковые константы, используемые в программе, размещаются компиляторами C/C++ в так называемой таблице строк, являющейся частью исполнимого файла программы.

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

Строковая константа может быть "при­своена" указателю на тип char:

char* s1 = "The string";

В приведенном объявлении указатель на константные символьные данные s1 инициализируется адресом строковой константы "The string".

Следует отметить отличие данного объявления от объявления

char s2[] = "The string";

Первое из приведенных объявлений формирует указатель s1 размером в четыре байта, содержащий адрес строковой константы "The string", второе – массив символов s2 размером в 11 байтов (длина строки "The string" плюс нулевой символ) с соответствующими начальными символьными значениями. Соответственно, различаются и способы работы с объявленными данными: элементы массива s2 можно изменять, а данные, на которые указывает s1, вообще говоря, нет.

Второе объявление можно рассматривать как краткую форму записи объявления

char s2[] = {'T','h','e',' ','s','t','r','i','n','g','\0'};

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

Символьные функции работают с отдельными символами и требуют включения в программу директивы

#include <ctype.h>

Строковые функции оперируют массивами символов, завершающихся нуль-символом, и в большинстве своём в качестве параметров принимают указатели на тип char. Для использования этих функций в программе нужно подключить их описания с помощью директивы препроцессора

#include <string.h>

Указатель на данные одного типа может быть преобразован в указа­тель на данные другого типа. Однако при этом следует учитывать, что данные, адресуемые преобразованным указателем, будут интерпретироваться по-новому (может измениться их размер, а, следовательно, и значе­ние). Преобразование указателей выполняется операцией приведения типа:

(тип *) указатель

Например, операторы:

short int i = 0x1010; // Это десятичное 1*4096+ 1*16 = 4112

short *ptr = &i;

short int j = *ptr;

short int k = *(char*)ptr;

приведут к созданию переменной j с начальным значением 0x1010 и переменной k с начальным значением 0x10.




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


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


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



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




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