Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Основные операции с указателямиСодержание книги
Поиск на нашем сайте
Наиболее важные операции с указателями: операция обращения по адресу "*" (называется также разыменованием указателя, разадресацией, операцией косвенной адресации) и операция определения адреса "&". Операция обращения по адресу служит для доступа к данным описанного типа, т.е. для присвоения и считывания данных. Пример: int*x; int d; // не путать разадресацию со звёздочкой при объявлении указателя int у = *х // у = 4; В первой строке переменной-указателю х присваивается адрес, где хранится значение переменной d во второй строке переменной у присваивается разыменованное значение указателя х, т.е. значение 4. Если первую операцию написать без адреса, т.е. х = d (а х объявлен как int*x), то х будет указывать на ячейку памяти с адресом??:4 (?? - в зависимости от модели памяти) и значение переменной у будет равно значению,которое хранится по указанному адресу. Операция определения адреса & возвращает адрес памяти своего операнда (переменной, константы, функции и т. д.). Формат получения адреса следующий: <адрес> = & <переменная>; Пример: int x, *y; y = &a; // указатель y содержит адрес х Кроме того, указатели можно присваивать друг другу, если они одного типа.
Пример: int a, *x, *y; x =y; Всем указателям для инициализации можно присваивать константу NULL, при этом гарантируется, что этот адрес не совпадает ни с каким другим адресом, зарезервированным системой. Операции с указателями будут также рассмотрены при работе с массивами.
Указатели и целые величины Выражение целого типа может складываться и вычитаться из переменной типа указатель. Два указателя на объекты одного и того же типа могут вычитаться; в этом случае результат имеет целый тип. char*a = "Slovo", c; c = *(a+3); // c = 'v' char*a, *b = "ABCDE"; a = b + 2; c = *(- - a; char k = *a; int d = b-a) Динамическое размещение указателей в памяти
Чтобы не вызвать конфликт в операционной системе или не нарушить работу приложения, нужно выделять место для указанного типа данных в допустимом пространстве памяти, которое называется «heap» или «куча». Выделение (если есть возможность) памяти и присвоение её адреса указателю, по которому можно работать с описанным типом осуществляется библиотечной функцией malloc () или alloc(), (заголовочный файл <mem.h>), которую необходимо предварительно включить в программу директивой # include. Эти функции при последующих выделениях памяти предотвращают конфликты между указателями. Формат использования данной функции: <указатель> = (<тип_указателя>*) malloc (<размер_выделяемой_памяти_байт>); Указатель на один тип может быть преобразован в указатель на другой тип. При этом обеспечивается возможность преобразования указателя на объект данного размера в указатель на объект меньшего размера в указатель на объект меньшего размера и обратного без изменений. Например, функция динамического распределения памяти может воспринимать размер (в байтах) объекта, для которого выделяется память, и возвращать указатель на тип void double*dp; d = (double*) malloc (sizeof(double)); // функция malloc () выделяет память free dp: *dp = 22. / 7.0 // освобождение динамических выделений памяти. При использовании функции обеспечивается преобразование возвращаемого значения из указателя на тип void в указатель на тип double.
Пример /* ЗАНЯТИЕ N 8 Выполнил студент группы......... Петров Ю.В. Применение указателей при работе с переменными различных типов, изменение значений переменных по адресу и по ссылке. Примеры операций с указателями */
#include <stdio.h> #include <conio.h> #include <string.h> #include <alloc.h> int a; //Объявление глобальной переменной типа int int main(void) {char c1,c2,buf[20]; //buf-указатель на тип char char *pc; char *pst="\"slovo\"";//Объявление указателей на тип char int *pi= &a; float *pf, f=26.6; //Объявление указателя на тип float double *pd, d; //Объявление указателя на тип double double &sd= d; //Объявление ccылки на тип double void *pv; //Объявление указателя на тип void char *pchar=(char *)malloc(20);//Выделение памяти в куче clrscr(); // Объявление функции void *malloc(size_t size); pc=&c1; pf=&f; pd=&d; printf(" Ввод переменной c1 типа char: "); scanf("%c",pc); //Функция ввода данных, & - операция взятия //адреса отсутствует printf(" Вывод переменной c1 типа char: "); printf("%c\n",*pc); fflush(stdin); pc=&c2; printf(" Ввод переменной c2 типа char: "); scanf("%c",pc); //Функция ввода данных, & - операция взятия //адреса отсутствует printf(" Вывод переменной c2 типа char: "); printf("%c\n",*pc); printf("\n Ввод переменной (a) типа int: "); scanf("%d",pi); a+=5; ++*pi; //Изменение а = а+5+1 printf(" \t Вывод (a) после изменения а=а+5+1\n"); printf(" Формат вывода (int): +6d #6o #8x\n"); printf("\t\t |%+6d|%#6o|%#8x|\n ",a,*pi,*pi); printf("\n Вывод исходной cтроки: %s\n",pst); pc=pst; printf(" Вывод cтроки в цикле:\n"); while(*pc!='\0') { printf(" %s",pc); pc++; } printf("\n Ввод cтроки в массив: "); scanf("%s",buf); pv=buf; //Использование указателя (pv) на тип void printf(" Вывод cтроки из массива: %s\n",(char *)pv); //pv -void printf(" Ввод cтроки в динамическую память: "); scanf("%s",pchar); printf(" Вывод cтроки из динамической памяти: %s\n",pchar); printf(" Ввод переменных типа float and double (через пробел):\n"); printf("\t\t "); scanf("%f %lf",pf,pd); pv=pf; //Использование указателя (pv) на тип void *pf=*(float *)pv*10; //f*=10; *pd=sd+*(float *)pv; //Использование ccылки (sd) на тип double pv=pd; //d+=f; printf("\t Вывод результатов расчета f*=10 d+=f\n"); printf(" Формат вывода (float): 10.6f 10.6e +10.6g\n"); printf("\t\t |%10.6f|%10.6e|%+10.6g|\n",f,*pf,*pf); printf(" Формат вывода (double): 10.8lf 10.8e 10.8g\n"); printf("\t\t |%10.8lf|%10.8e|%+10.8g|\n ",*pd,*(double *)pv,sd); getche(); return 0; } /* Ввод переменной c1 типа char: w Вывод переменной c1 типа char: w Ввод переменной c2 типа char: t Вывод переменной c2 типа char: t
Ввод переменной (a) типа int: 40 Вывод (a) после изменения а=а+5+1 Формат вывода (int): +6d #6o #8x | +46| 056| 0x2e|
Вывод исходной cтроки: "slovo" Вывод cтроки в цикле: "slovo" slovo" lovo" ovo" vo" o" " Ввод cтроки в массив: unsigned Вывод cтроки из массива: unsigned Ввод cтроки в динамическую память: dinamo Вывод cтроки из динамической памяти: dinamo Ввод переменных типа float and double (через пробел): 1.5 20.4 Вывод результатов расчета *pf=*pf*10; *pd=*pd+f; Формат вывода (float): 10.6f 10.6e +10.6g | 15.000000|1.500000e+01| +15| Формат вывода (double): 10.8lf 10.8e 10.8g |35.40000000|3.54000000e+01| +35.4| */ Ход работы 1 Изучить теоретические сведения. 2 В соответствии с индивидуальным заданием разработать алгоритм применения указателей. 3 Разработать программу, содержащую указатели на скалярные типы данных, показать использование указателей в арифметических операциях. 4 Набрать программу на компьютере и устранить ошибки. 5.Получить результат. 6 Оформить отчет и сделать выводы по работе. 7 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Индивидуальное задание к лабораторной работе №8 Присвоить раз именованному указателю на тип Р1 значение арифметического выражения АВ включающего указатели на типы Р2 и Р3. Арифметическое выражение реализовать в виде функции возвращающей указатель на тип Р1. Вывести на экран значение указателя Р2 и значение на которое он ссылается. Индивидуальные задания взять из таблицы 8.1. Таблица 8.1 - индивидуальные задания
Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы 1 Дайте определение указателю. 2 Какой синтаксис объявления указателя? 3 С какими модификаторами может быть использован указатель? 4 Чем отличается (*) в объявлении указателя и в выражении, где он используется? 5 Что такое операция обращения по адресу? 6 Что такое операция взятия адреса? 7 Как бы Вы присвоили адрес переменной с плавающей точкой salary указателю с именем pt_sal? 8 Обязательно ли инициализировать указатель при его объявлении? 9 В чём особенности использования указателя на тип void? 10 Для чего применяется константа NULL? 11 Что такое динамическое выделение памяти, где она выделяется и с помощью каких функций? 12 Можно ли присваивать указатели одного типа? 13 Как осуществить приведение типа указателя? 14 Объясните примеры, приведенные в теоретической части. Лабораторная работа №9 Массивы. Селективная обработка массивов (2 часа) Цель работы: изучить работу с массивом как с составным типом данных, приёмы ввода и вывода данных, обработку одномерных массивов. Теоретические сведения Массив - это набор объектов (элементов) одинакового типа, доступ к которым осуществляется прямо по индексу в массиве. Обращение к массивам в С реализовано с помощью указателей (pointers). Массив в С можно объявить следующим образом: [Класс_памяти>] <Тип_данных> <Имя_массива> [<Размер_массива>]; <Размер_массива> может быть задан константным выражением. Доступ к элементам массива происходит следующим образом: <Имя_массива>[<Значение_индекса>], т.е., используя имя массива и индекс от 0 до (<Размер_массива> -1), т.е. на единицу меньше, чем < Размер_массива>. Пример объявления массива: char name[20]; int grad[125]; float b[30]; Массив имеет имя (name), которое является указателем на тип элементов массива и адресует первый элемент с индексом (Æ). Имя массива фактически является константным указателем, ссылающимся на начальный адрес данных, с которого расположен сам массив и может быть использовано как указатель. Обращение к элементам может осуществляться следующим образом name[0] -1-ый элемент массива, name[1]- 2-ой элемент, name[19] – последний 20-ый элемент. При трансляции программы компилятор отводит место под объявленный массив статически, т.е. в области данных участок памяти, выделенный для массива, не может быть динамически изменен. Размер выделяемой памяти под массив можно определить по следующей формуле: (sizeof(тип)*<Размер_массива>) байтов. Массив размещается последовательно в памяти, т.е. каждая следующая ячейка расположена сразу после предыдущей. В С не включены стандартные операторы, которые осуществляют работу с массивами, как стандартными типами данных. Чтобы скопировать данные из одного массива в другой необходимо организовать функцию, тело которой должно иметь примерно следующий вид: for(i=0; i<rasm; i++) mas2[i] = mas1[i]; где rasm - размер массивов, соответствующий указанному в их объявлении # define rasm 20 int mas2[rasm], mas1[rasm]; Пример
/* ЗАНЯТИЕ N 9 Выполнил студент группы......... Петров Ю.В. Применение массивов при работе с переменными различных типов (int,float), изменение значений переменных. Примеры приемов работы с массивами */
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define N 15 #define M 10 int p[N], x[N], i, j, j1, count=0; int y[N*2], z[N]={15,37,10,-20,-10,25,27,30,89,67,\ 24,-6,22}; int *pi=y; //Два последних элемента z[N] равны 0 float *pf, mf[N]; void main() { clrscr(); randomize(); pf=mf; printf("Исходный массив p[]: \n"); for (i=0;i<N;i++) { p[i]=random(81)-40; //Инициализация с помощью функции printf("%4d",p[i]); //random() в интервале +40...-40 if (p[i]>0) //Выбор элементов >0 в массив х[] { x[count]=p[i]; mf[count]=x[count]/5.5; count++; } } printf("\n"); printf("Исходный массив z[j]: \n"); for (i=0;i<N;i++) printf("%4d",z[i]); printf("\nРабочий массив x[count]>0 из p[i]: \n"); for (i=0;i<count;i++) printf("%4d",x[i]); j=0;//Выбор элементов в массив у[] из z[] и р[] по условиям for (i=0;i<N;i++) {if (z[i]>=-M && z[i]<=(M+N) && (z[i]%2==0)) { *pi = z[i]; pi++; j++;} if (p[i]>=-M && p[i]<=(M+N) && (p[i]%2==0)) { *(y+j)=p[i]; pi++; j++;} } j1=j; printf("\nРабочий массив y[j] из z[i] и р[i] по условиям \n"); printf(" -M<y[j]<(M+N) и четное:\n"); for (i=0;i<j1;i++) printf("%4d",y[i]); printf("\nРабочий массив mf[j]=x[j]/5.5 \n"); for (i=0;i<count;i++) printf("%6.4f ",*(pf+i)); //Сортировка массива x[] for (i=0;i<count;i++) for (j=i;j<count;j++) if (x[i]<x[j]) {int c=x[i];x[i]=x[j];x[j]=c; } else continue; //Сортировка массива у[] for (i=0;i<j1;i++) for (j=i;j<j1;j++) if (y[i]<y[j]) {int c=y[i];y[i]=y[j];y[j]=c; } else continue; printf("\nСортированный массив x[]: \n"); for (i=0;i<count;i++) printf("%4d",x[i]); printf("\nСортированный массив y[]: \n"); for (i=0;i<j1;i++) printf("%4d",y[i]); getch(); } /* Исходный массив p[]: 32 37 -34 11 30 8 -11 -38 6 -21 -27 -23 -30 -19 -29 Исходный массив z[j]: 15 37 10 -20 -10 25 27 30 89 67 24 -6 22 0 0 Рабочий массив x[count]>0 из p[i]: 32 37 11 30 8 6 Рабочий массив y[j] из z[i] и р[i] по условиям -M<y[j]<(M+N) и четное: 10 -10 8 6 24 -6 22 0 0 Рабочий массив mf[j]=x[j]/5.5 5.8182 6.7273 2.0000 5.4545 1.4545 1.0909 Сортированный массив x[]: 37 32 30 11 8 6 Сортированный массив y[]: 24 22 10 8 6 0 0 -6 -10 */
Ход работы 1 Изучить теоретические сведения. 2 В соответствии с индивидуальным заданием разработать алгоритм инициализации массива, селективной обработки массива. 3 Разработать и набрать программу, отладить её на компьютере, изучить работу операторов. 4 Получить результаты. 5 Оформить отчет. 6 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Требования к содержанию отчёта приведены в лабораторной работе №1
Индивидуальное задание к лабораторной работе №9 Составить программу для обработки массива согласно индивидуальному заданию приведенному в таблице 9.1. Таблица 9.1 - индивидуальное задание
Контрольные вопросы для подготовки и самостоятельной работы 1 С какого числа начинается индексация массивов в языке С? 2 Как объявляется 1-но мерный массив? 3 Какие типы языка С можно и нельзя указывать в качестве типа при объявлении массива? 4 В каких случаях размерность массива при объявлении можно не указывать? 5 Какой тип имеет имя массива? 6 Как осуществляется инициализация элементов массива? 7 Как можно инициализировать массив с элементами типа char? 8 Можно ли использовать средство typedef для объявления типа “массив”? 9 Какие альтернативные формы записи элементов массива можно использовать? Приведите примеры. 10 Каковы правила использования индексных выражений? 11 Существуют ли операции работы с массивами? 12 Какие классы памяти можно использовать при объявлении массивов? Лабораторная работа №10 Формирование рабочих массивов с помощью (2 часа) Цель работы: изучить и научиться применять обработку массивов по заданным логическим условиям, формирование новых массивов. Теоретические сведения Смотри теоретические сведения по предыдущей работе. Пример /* ЗАНЯТИЕ N 10 Разработал Петров Ю.В. Объявить массивы заданной размерности, выполнить их инициализацию с применением функции random() и явно. Получить доступ к элементам массивов с использованием операторов организации цикла. Переписать положительные элементы массива x[1],x[2],...,x[N] в массив y[t], а отрицательные - в массив z[p]. Элементы в массивах y[t] и z[p] располагать подряд, элементы массива y1[t] рассчитать для положительных x[i] по формуле y1[t]=y1[t]+2*exp(b*y[t]-y[t]*y[t]),где b=N/5 */
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> # define N 20 main() { clrscr(); randomize(); int i,t=0,p=0,b=N/5; int x[N],y[N],z[N]; //Объявление одномерного массива (вектора) float y1[N]={2.3,3.4,4.0,5.2,6.6,7.9,8.34,9.8,10.4,11.2,\ 10.1,9.9,8.7,7.5}; //Инициализация первых 14, остальные -0 printf("\nВывод элементов исходного массива y1[ ]\n"); for(i=0;i<N;i++) {printf(" y1[%2d]=%4.1f",i+1,y1[i]); if ((i+1)%5==0) printf("\n"); } printf("\nИнициализация одномерного массива x[N]\n"); for(i=0;i<N;i++) { x[i]=random(40)-20; printf(" x[%2d]=%2d ",i+1,x[i]); //Вывод элементов if ((i+1)%5==0) printf("\n"); //массива x[ ] if (x[i]>=0) //Выбор положительных значений { y[t]=x[i]; //Расчет элементов массива y1[ ] y1[t]=y1[t]+2*exp(b*y[t]-y[t]*y[t]); t++; } else {z[p]=x[i]; p++;} //Выбор отрицательных значений } printf("\nВывод элементов массива y[ ]>0\n"); i=0; while (i<t) { printf(" y[%2d]=%2d ",i+1,y[i]); if ((i+1)%5==0) printf("\n"); i++; } printf("\n"); printf("\nВывод элементов массива y1[ ] после расчета\n"); i=0; do { printf(" y1[%2d]=%3.2f",i+1,y1[i]); if ((i+1)%5==0) printf("\n"); i++; } while (i<t); printf("\n"); printf("\nВывод элементов массива z[ ]<0\n"); for(i=0;i<p;i++) { printf(" z[%2d]=%2d ",i+1,z[i]); if ((i+1)%5==0) printf("\n"); } getch(); return 1; } /* Вывод элементов исходного массива y1[ ] y1[ 1]= 2.3 y1[ 2]= 3.4 y1[ 3]= 4.0 y1[ 4]= 5.2 y1[ 5]= 6.6 y1[ 6]= 7.9 y1[ 7]= 8.3 y1[ 8]= 9.8 y1[ 9]=10.4 y1[10]=11.2 y1[11]=10.1 y1[12]= 9.9 y1[13]= 8.7 y1[14]= 7.5 y1[15]= 0.0 y1[16]= 0.0 y1[17]= 0.0 y1[18]= 0.0 y1[19]= 0.0 y1[20]= 0.0
Инициализация одномерного массива x[N] x[ 1]= 8 x[ 2]= 10 x[ 3]=- 7 x[ 4]= 13 x[ 5]=- 1 x[ 6]=-14 x[ 7]= 5 x[ 8]= 17 x[ 9]=-14 x[10]=-19 x[11]= 13 x[12]= 8 x[13]=-10 x[14]=-16 x[15]= 5 x[16]= 9 x[17]=-11 x[18]=-12 x[19]=-16 x[20]=- 3
Вывод элементов массива y[ ]>0 y[1]= 8 y[2]=10 y[3]=13 y[4]= 5 y[5]=17 y[6]=13 y[7]= 8 y[8]= 5 y[9]= 9
Вывод элементов массива y1[ ] после расчета y1[1]=2.30 y1[2]=3.40 y1[3]=4.00 y1[4]=5.21 y1[5]=6.60 y1[6]=7.90 y1[7]=8.34 y1[8]=9.81 y1[9]=10.40
Вывод элементов массива z[ ]<0 z[ 1]=- 7 z[ 2]=- 1 z[ 3]=-14 z[ 4]=-14 z[ 5]=-19 z[ 6]=-10 z[ 7]=-16 z[ 8]=-11 z[ 9]=-12 z[10]=-16 z[11]=- 3 */ Ход работы 1 Изучить теоретические сведения 2 В соответствии с индивидуальным заданием, на основе программы предыдущей работы разработать алгоритм, обеспечивающий формирование рабочих массивов по заданным логическим условиям. Операции с массивами вынести в отдельную функцию. 3 Разработать программу, набрать и отладить программу на компьютере. 4 Изучить работу операторов. 5 Получить результаты. 6 Оформить отчет. 7 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Требования к содержанию отчёта приведены в лабораторной работе №1.
Индивидуальное задание к лабораторной работе №10 Составить программу для обработки массивов согласно индивидуальному заданию приведенному в таблице 10.1.
Таблица 10.1 - Индивидуальное задание
Контрольные вопросы для подготовки и самостоятельной работы 1 Как производится доступ к элементам массива? 2 Какое количество операторов цикла необходимо для обработки главной или побочной диагонали массива? 3 Какие методы сортировки элементов Вы знаете? 4 Можно ли использовать указатель на тип элементов массива в качестве имени массива и что для этого необходимо? 5 Адрес какого элемента содержит имя массива? 6 Какие классы памяти можно использовать при объявлении массива? 7 Какие классы памяти используются по умолчанию? 8 Как размещаются элементы массива в памяти? 9 Как определяется количество байтов, на которое смещается указатель индексного выражения? Зависит ли смещение указателя от типа элементов массива?
Лабораторная работа №11 Обработка символьных данных (2 часа) Цель работы: изучить и научиться использовать массивы символьных данных. Теоретические сведения Теоретические сведенья приведены в лабораторных работах N3, N8 и N9.
Ход работы 1 Изучить теоретические сведения 2 В соответствии с индивидуальным заданием разработать алгоритм и программу для обработки символьных данных, представленных в виде массивов без применения библиотечных строковых функций. Для работы со строками использовать указатели на тип char, массивы указателей. 3 Набрать и отладить программу на компьютере. 4 Изучить работу операторов. 5 Получить результаты. 6 Оформить отчет. 7 Подготовиться к защите лабораторной работы, изучив вопросы по данной теме.
Требования к содержанию отчёта приведены в лабораторной работе №1.
Индивидуальное задание к лабораторной работе №11. Составить программу для обработки символьных данных согласно индивидуальному заданию приведенному в таблице 11.1. Таблица 11.1
Контрольные вопросы для подготовки и самостоятельной работы 1 Укажите способы объявления символьных строк (переменных и констант). 2 Какой символ ставится в конце строки? 3 Сколько памяти занимает один символ строки? 4 Сколько памяти занимает строка (слово) из 6 букв? 5 Можно ли использовать указатели для адресации символьных строк, содержащихся в массивах? 6 Сколько указателей можно использовать для работы с массивами? 7 Какой объект адресуется указателем, смещенным относительно начала строки на n байтов? 8 Какая функция позволяет определить длину строки? 9 Какие операции применимы к указателям и необходимы для работы со строками? 10 Можно ли инициализировать массивы с данными типа char строками символов? 11 Можно ли инициализировать указатели на тип char строками символов? 12 Какие символьные последовательности называют управляющими, что они означают? Лабораторная работа № 12 Использование библиотечных функций для работы с символьными данными (2 часа) Цель работы: выработать практические навыки в написании программ с использованием библиотечных функций для работы с символьными данными. Теоретические сведения Функции для работы с символьными данными
Для работы с символьными данными разработан ряд библиотечных функций. Рассмотрим некоторые из них: char *strcat(char *dest, const char *src); - добавляет копию строки src в конец dest. Длина результирующей строки равна strlen(dest) + strlen(src). strcat() - возвращает указатель на результирующую строку. Функция char *strchr(const char *s, int c); - просматривает строку в прямом направлении для отыскания в ней заданного символа. Функция strchr() ищет первое вхождение символа с в строку s. Символ конца строки считается частью строки, поэтому - strchr(strs, 0) вернет значение указателя на нулевой конечный символ строки strs. Функция strchr() возвращает указатель на первое вхождение символа с в s, если c не обнаружен в s, то strchr() возвращает нуль. int strcmp(const char *s1, const char *s2); -осуществляет беззнаковое сравнение строк s1 и s2, начиная с первого символа каждой строки, до тех пор, пока очередные соответствующие символы в строках не будут различны или пока не будут достигнуты концы строк. Функция strcmp () возвращает значение: < 0 если s1 меньше чем s2; = = 0 если s1 равна s2; > 0 если s1 больше чем s2. int strcmpi(const char *s1, const char *s2); -сравнивает одну строку с другой аналогично s trcmp(), но без различия больших и маленьких букв. Функция strcmpi() определена как макрос в string.h и преобразует вызовы strcmpi() к вызовам strcmp(). Макрос обеспечивает совместимость с другими компиляторами С. int strncmp(const char *s1, const char *s2, size_t maxlen); -сравнивает часть одной строки с частью другой. Функция strncmp() производит такое же беззнаковое сравнение, как и strcmp(), но просматривает не более, чем maxlen символов. Она начинает с первого символа каждой строки и заканчивает, когда очередные символы в строках различны или когда проверено maxlen символов. Функция strncmp () возвращает значение типа int, смысл которого аналогичен strncmp(). char *strcpy(char *dest, const char *src); - копирует строку src в dest, завершая работу после копирования символа окончания строки. Функция strcpy() возвращаетуказатель на результирующую строку (dest). size_t strcspn(const char *s1, const char *s2); -ищет в строке первый сегмент, не содержащий ни одного символа из заданного набора символов. Функция strcspn() возвращает длину первого встретившегося сегмента строки s1, сост
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 574; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.42.225 (0.009 с.) |