![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Литерные указатели
Строковая константа, записаная в СИ в виде изображение есть массив литер или символов. Количество байтов=количество литер+1 (для символа ’\ Ф ’) ПРИМЕР 10-6 Char * pstr Pstr=’ С указатели ’ Строка не копируется, а только указатели на массив. ПРИМЕР 10-7 Char s _str[] =” как массив ” Char *p_str=” с указателем” s_str ---Элементы этого массива могут изменяться, но ссылается в оперативную память p_str --- Это указатель инициализированный В Си нет операторов для работы с массивом в целом -> недопустимо
10.5 Литерные указатели.
Строковая константа есть массив литер (символов). Количество байтов равно количеству литер +1 (для символа окончания строки \0).
Пример 10.6 char *pstr; pstr=”с указателем”:
! Различие между декларациями строк как массива и с помощью указателя: Пример 10.7 char s_str[]=”как массив”; /*11dyte*/ char p_str =” с указателем”; / *13byte*/
s_str
Замечание s_str: - элементы s_str могут изменяться. - s_str всегда ссылается на одно и то же место в памяти.
p_str: - при изменении указателя он будет ссылаться на что либо другое.
!!! В Си нет оператора для работы с массивом в целом (=> недопустимо s_str изменить).
10.6 Массивы указателей.
![]() ![]()
Удобно в Си текст, представлять массивом указателей.
Пример 10.9 #define KL 100 int n1, n2; char *v[KL]; char *temp; int k; … temp=v[n1]; v[n1]=v[n2]; v[n2]=temp; k=KL; while (k--> 0) printf(“%s\n”, *v++); 10.7 Инициализация массива указателей Пример 10.10: Char*m_name[]= { ”ошибка”, ”январь”, ”февраль”, ”март”, ”апрель”, Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение ”июнь”, ”июль”, ”август”, ”сентябрь”, ”октябрь”, ”ноябрь”, ”декабрь” }; /* обращаемся по номеру месяца */ (n< 1 || n> 12)? m_name[0]: m_name[n]; 10.8 Многомерные массивы Пример 10.11: /* представляется как массив массивов */ int mpr[2][9]= { /* даты */ {1, 7, 8, 1, 2, 9, 24, 7, 8}, /* месяцы */ {1, 1, 3, 5, 5, 5, 8, 11, 11} } Это даты праздничных дней Украины не привязанных к Церковному календарю. Обращение к элементам двумерного массива. …………………………………………………………………………… d_may1=mpr[0][3]; m_may1=mpr[1][3]; 10.9 Указатели вместо многомерных массивов Пример 10.12: int a[3][4] /* массив массивов */ 0 1 2 3
Int*b[3]
Массив а занимает 24 байта (2 байта * количество элементов) Массив b занимает первые 6 байт. У массива b не выделена пока память под собственно элементы. Это выделение может быть выполнено 2 способами: 1) при инициализации; 2) либо явно динамическим захватом памяти (см. 2 семестр); Преимущество 2-го способа состоит в том, что строки в массиве b могут быть различной длины. Это преимущество используется в литерных массивах. Пример 10.13: Берем из примера 10.10 первые 3 Элемента массива и выделяем под них память 2 способами. 1) /* объявление массива строк как массива массивов char
посчитает компилятор обязательно задается
10 20 30
Количество не использованных байтов: 12 (40%) 2) char*m_name2[]={”ошибка”, ”янв.”, ”фев.”};
Библиотека для работы со строками string.h 1 strlen(s), где s – строка Определяет длину строки (информационной части, без \0) int l; l=strlen(“пример”); /* l=6 */ 2 strcat(s1, s2) /* s1+=s2 */ s2 конкатенируется к s1(s1 – меняется, s2 – не меняется) char a[]=”Белеет ”, /* a~Белеет */ b[]=”парус ”; /* b~парус */ strcat(a, b); /* a~Белеет парус */
3 strcpy(s1, s2) Копирование строки s2 в s1 (s1 – меняется, s2 – не меняется) char a[]=”Белеет ”, b[]=”парус ”; char *c; strcpy(c, a); /* c~”Белеет ” */ strcat(c, b); /* c~”Белеет парус ” */ 4 strcmp(s1, s2) Сравнение строк (в лексико-графическом порядке) /* Происходит посимвольное вычитание ASCII кодов */
strcmp= < 0, s1< s2 > 0, s1> s2 Пример: int r1, r2, r3; char a[]=”ПО96а”, b[]=”ПО96б”ж char *c; strcpy(c, a); /* c~”ПО96а” */ r1=strcmp(a, c); /* r1=0 */ r2=strcmp(a, b); /* r2< 0 */ r3=strcmp(b, c); /* r3> 0 */
Библиотека проверки символов ctype.h Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:— Разгрузит мастера, специалиста или компанию; — Позволит гибко управлять расписанием и загрузкой; — Разошлет оповещения о новых услугах или акциях; — Позволит принять оплату на карту/кошелек/счет; — Позволит записываться на групповые и персональные посещения; — Поможет получить от клиента отзывы о визите к вам; — Включает в себя сервис чаевых. Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе Тип всех функций - int. Все функции отвечают на вопрос в соответствии с названием функции: ”Являются ли аргумент этой функции тем, что сформулировано в названии? ” Результат: 1 или 0. Тип аргумента – int!!! Хотя все функции анализируют символы, но символьная константа имеет тип int.(т.к. в константе могут быть символы, которые в ASCII кодируются 2 байтами, а char только 1 байт. isdigit(c) – цифра (0..9) (если цифра, то вернет 1, иначе 0) isalpha(c) – буква (латынь) isalnum(c) – буква (латынь) или цифра isupper (c) – прописная буква islower (c) – строчная буква Пример: int c1=’9’, c2=’s’, c3=’G’, c4=’y’, c5=’=’; int r1, r2, r3, r4, r5;
r2=isalpha(c2); r2=1 r3=isalnum(c1); r3=1 r3=isalnum(c5); r3=0 r4=isupper(c3); r4= 1 r5=islower(c4); r5=1 Преобразование символов. 1) atoi(s) - выполняет преобразование строки в int 2) atol(s) - выполняет преобразование строки в длинный int Строка s – это аргумент содержащий изображение этого числа. Результатом является целое или длинное целое число. Пример: int i;
i=atoi (”1996”); i=1996 l=atol(”1999000”); l=1999000
11 СТРУКТУРЫ В ЯЗЫКЕ СИ
Структура языка Си- это эквивалент записи. Структура - одна или несколько переменных возможно различных типов, которые сгрупированы под одним именем.
ПР.11.1 /* строка таблицы */
Ф.И.О МАТЕМ ФИЗ Р.ЯЗ
Элементы разных типов
ПР.11.2 Представление /* точка А в пространстве */ можно выполнить с помощью структуры: xa ya za
Элементы массива безликие. Элементы структуры имеют имена.
ПР.11.3 /* окружность на плоскости */
x0 y0 R
11.1 Объявление структурного типа в языке СИ
синтаксис: struct [< имя = тег> ] {< декларация..члена1>; ... < декларация члена N>; }; - Декларация структуры
= тип - Если после слова struct указать имя (tag), то это есть имя типа, кот. можно далее пользоваться как именем любого другого базового типа (как float, int). - Имена тегов и членов могут совпадать с именами других переменных. - Объявление структурного типа – это образец, а не декларация данных (память не выделяется).
- ПР.11.4 /* для 11.2 */
Struct без тега struct point c тегом { int xa; { int xa; int ya; int ya; int za; int za; }; };
ПР.11.5 /* для 11.3 */
Struct Struct circle { float x0; { float x0; float y0; float y0; float r; float r; }; };
11.2. Декларация переменных структурного типа.
I сп < декларация типа структ. > < список переменных>; 1 оператор
II сп struct < тег> < список переменных>; 2 оператора
ПР.11.6 /* прямая: через точки А и В */
Struct struct point a, b; { int xa; см.11.4 int ya; int za; } a, b;
Инициализация:
Переменные структурного типа можно инициализировать как и все другие.
ПР.11.7 /* окружность с центром (2; 3) и радиусом 5.5 */
Без тега Struct { float x0; float y0; float r; } pr = {2.0, 3.0, 5.5}; c тегом struct circle pr = {2.0, 3.0, 5.5}
Доступ к элементам структуры
< имя структуры>.< имя члена>
Пример 11.8 /*расстояние от начала координат до точки pt*/ struct {float x; float y; } pt={20.0, 15.0}; double dist; dist=sqrt((double)pt.x*pt.x+(double)pt.y*py.y); printf(“От начала координат”); printf(“до точки (%f, %f)”, pt.x, pt.y); printf(“расстояние %f”, dist);
|