![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 582; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.120.119 (0.013 с.) |